如何从另一个数组中删除数组元素?

时间:2013-05-01 21:52:59

标签: php arrays multidimensional-array

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

2 个答案:

答案 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
)