我有这个数组。我如何删除所有存在于另一个数组中的元素,即$remove
,并从1而不是0开始重新索引最终数组?
$info = array(
'1' => array('name' => 'abc', 'marks' => '56'),
'2' => array('name' => 'def', 'marks' => '85'),
'3' => array('name' => 'ghi', 'marks' => '99'),
'4' => array('name' => 'jkl', 'marks' => '73'),
'5' => array('name' => 'mno', 'marks' => '59')
);
$remove = array(1,3);
所需输出: $info = array(
'1' => array('name' => 'def', 'marks' => '85'),
'2' => array('name' => 'jkl', 'marks' => '73'),
'3' => array('name' => 'mno', 'marks' => '59')
);
到目前为止,我已经尝试了这两种方法。
if (($key = array_search(remove[0], $info))) {
unset($info[$key]);
$info = array_values($info);
}
和
$result = array_diff($info, $remove);
可以这样做:
$result = array_diff_key( $info, array_flip( $remove));
这个array_flip()
是你的$remove
数组,所以键成为值,值成为键。然后,我们使用两个数组的array_diff_key()
对键进行区分,以获得以下结果:
Array
(
[2] => Array
(
[name] => def
[marks] => 85
)
[4] => Array
(
[name] => jkl
[marks] => 73
)
[5] => Array
(
[name] => mno
[marks] => 59
)
)
最后,为了得到确切的输出,您可以通过传递array_values()
来重新索引数组,但这将产生从0开始的顺序索引,而不是1:
$result = array_values( array_diff_key( $info, array_flip( $remove)));
如果您真的需要索引从1开始,您将需要array_combine()
和range()
的组合:
$result = array_diff_key( $info, array_flip( $remove));
$result = array_combine( range( 1, count( $result)), $result);
如何使用array_diff函数?
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
这将输出
Array
(
[1] => blue
)