0

我有这个数组。如何删除另一个数组中存在的所有元素,即$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);
4

2 回答 2

1

像这样的东西会起作用:

$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(),但这将产生从零开始的顺序索引,而不是一:

$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);
于 2013-05-01T21:56:08.883 回答
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
)
于 2013-05-01T21:57:41.957 回答