PHP - 按值从多维数组中删除

时间:2017-02-06 10:03:03

标签: php arrays

我有一个多维PHP数组,想删除任何与值不匹配的元素(基于行)。

例如:

$user_types = [
    0 => ['ut_id' => 32, 'type' => 'admin'],
    1 => ['ut_id' => 31, 'type' => 'user'],
    2 => ['ut_id' => 801, 'type' => 'editor']
];

假设我只想要'type' == 'admin'所在的元素。我希望输出为:

$user_types = [
     0 => ['ut_id' => 32, 'type' => 'admin']
]

我还需要确保按顺序键入数组。因此,如果我只想要type == 'editor',则数组键仍应为0(而不是2),例如

 $user_types = [
     0 => ['ut_id' => 801, 'type' => 'editor']
 ]

我看过PHP array delete by value (not key),但这并不涉及多维数组。

我也看到了一些使用foreach循环的解决方案,但这似乎效率很低。

请有人指点我看什么方向吗?当谈到多维数组时,我找不到任何处理这个问题的例子。我见过Delete element from multidimensional-array based on value,但这似乎效率低下,大约在6年前写成。

1 个答案:

答案 0 :(得分:2)

您可以在此处使用php array_filter()功能:

<?php
$user_types = [
    0 => ['ut_id' => 32, 'type' => 'admin'],
    1 => ['ut_id' => 31, 'type' => 'user'],
    2 => ['ut_id' => 801, 'type' => 'editor']
];

$type = 'admin';
print_r(
    array_values(
        array_filter($user_types, function($entry) use ($type){
            return $entry['type'] === $type;
        })
    )
);

$type = 'editor';
print_r(
    array_values(
        array_filter($user_types, function($entry) use ($type){
            return $entry['type'] === $type;
        })
    )
);

上述代码的输出为:

Array
(
    [0] => Array
        (
            [ut_id] => 32
            [type] => admin
        )

)
Array
(
    [0] => Array
        (
            [ut_id] => 801
            [type] => editor
        )

)