PHP在关联数组的第二级搜索项并删除它

时间:2013-12-25 23:42:04

标签: php arrays

我有一个关联数组:

array(
    '0' => array(
        'id' => 1,
        'name' => 'one'
    ),
    '1' => array(
        'id' => 4,
        'name' => 'two'
    ),
    '2' => array(
        'id' => 8,
        'name' => 'three'
    )
);

我想要从item

的数组中删除id = 4

期望的输出:

array(
    '0' => array(
        'id' => 1,
        'name' => 'one'
    ),
    '1' => array(
        'id' => 8,
        'name' => 'three'
    )
);

问题:我应该使用哪个函数来查找该元素并将其从数组中删除?

2 个答案:

答案 0 :(得分:5)

只需滚动数组,然后根据密钥unset项目。

$test_array = array(
    '0' => array(
        'id' => 1,
        'name' => 'one'
    ),
    '1' => array(
        'id' => 4,
        'name' => 'two'
    ),
    '2' => array(
        'id' => 8,
        'name' => 'three'
    )
);

foreach ($test_array as $test_key => $test_value) {
  if ($test_value['id'] == 4) {
    unset($test_array[$test_key]);
  }
}


echo '<pre>';
print_r($test_array);
echo '</pre>';

输出结果为:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => one
        )

    [2] => Array
        (
            [id] => 8
            [name] => three
        )

)

编辑刚刚注意到您对该问题的编辑,该问题显示了确保新数组中没有间隙的所需输出。如果是这种情况,要重新键入数组以便它们再次顺序排列,只需在我的示例中的foreach之后使用array_values

foreach ($test_array as $test_key => $test_value) {
  if ($test_value['id'] == 4) {
    unset($test_array[$test_key]);
  }
}

$test_array = array_values($test_array);

新输出将是:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => one
        )

    [1] => Array
        (
            [id] => 8
            [name] => three
        )

)

答案 1 :(得分:2)

这会生成数组的副本,而不会产生不需要的元素。

$new = array_filter($old, function($elem){
    return $elem['id'] !== 4;
});