我有这个数组。如何删除另一个数组中存在的所有元素,即$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);
答案 0 :(得分:1)
这样的事情会起作用:
$result = array_diff_key( $info, array_flip( $remove));
此array_flip()
是您的$remove
数组,因此键成为值,值成为键。然后,我们对两个数组array_diff_key()
的to get this result的密钥进行了区分:
Array
(
[2] => Array
(
[name] => def
[marks] => 85
)
[4] => Array
(
[name] => jkl
[marks] => 73
)
[5] => Array
(
[name] => mno
[marks] => 59
)
)
最后,为了得到您的确切输出,您可以通过传递array_values()
来重新索引数组,但是这将产生从零开始的顺序索引,而不是一个:
$result = array_values( array_diff_key( $info, array_flip( $remove)));
如果确实需要索引从一开始,则需要array_combine()
和range()
的组合:
$result = array_diff_key( $info, array_flip( $remove));
$result = array_combine( range( 1, count( $result)), $result);
答案 1 :(得分:0)
使用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
)