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



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

相关内容

  • 没有找到相关文章

最新更新