我有一个多维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年前写成。
答案 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
)
)