php - PHP array_filter 递归
问题描述
请帮我过滤数组
我有数组:
$arr=[
'test' => [
'access' => 111,
'aa' => [
'access'=> 222,
'bb' => 333
],
],
'access' => 444,
'value' => 555
];
我想
$arr=[
'test' => [
'access' => 111,
'aa' => [
'access'=> 222,
],
],
'access' => 444,
];
我做
function array_filter_recursive($input)
{
foreach ($input as &$value) {
if (is_array($value)) {
$value = array_filter_recursive($value);
}
}
return array_filter($input,function ($key){
return $key == 'access';
},ARRAY_FILTER_USE_KEY);
}
var_dump(array_filter_recursive($arr));
仅返回 1 件商品
如果我更改函数,例如return $key != 'access';
它返回数组而不返回数组,key==access
但如果 $key == 'access' 则它不起作用
解决方案
access
如果键没有命名并且值不是嵌套数组,您只想删除它。这样,您可以保留任何中间数组。
您不能使用array_filter()
,因为它只接收值,而不是键。所以在你的foreach
循环中这样做。
function array_filter_recursive($input)
{
foreach ($input as $key => &$value) {
if (is_array($value)) {
$value = array_filter_recursive($value);
if (empty($value)) {
unset($input[$key]));
}
} elseif ($key != 'access') {
unset($input[$key]);
}
}
return $input;
}
推荐阅读
- maven - 如何将 Cytoscape 画布集成到 JavaFX Maven 应用程序中?
- paypal - Silvestripe 4.4 无法安装omnipay/paypal
- android - 在每台 Android 设备上显示相同大小的文本
- android - 使用 Mockk 模拟语言环境
- entity-framework - 我们可以通过实体框架中的查询执行时间来动态设置命令超时吗?
- coldfusion - 内存文件系统限制不能超过 JVM 最大堆大小
- java - 用我的函数模拟 MissingMethodInvocationException
- command-line - Rust 如何处理进程参数?
- c - 当我按下按钮时,如何对 nRF52 DK 进行编程以发送 BLE MIDI 消息?
- android - java.lang.SecurityException:我的位置需要权限 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION