php - 从三重嵌套数组PHP中删除元素
问题描述
我正在努力弄清楚如何根据最深层次的值从三重嵌套数组中删除元素。我想删除 time == "NA" 的任何位置子数组。我的数组结构如下。
Array
(
[0] => Array
(
[Id] => 151601
[First_Name] => JOHN
[Last_Name] => DOE
[Location_Id] => 10
[Positions] => Array
(
[North] => Array
(
[Current_Level] => 4
[Last_Date] => 11/7/2001
[Time] => 4:15 AM
)
[East] => Array
(
[Current_Level] => 4
[Last_Date] => 7/10/2003
[Time] => 7:30 PM
)
[South] => Array
(
[Current_Level] => 2
[Last_Date] => 8/10/2007
[Time] => NA
)
[West] => Array
(
[Current_Level] => NA
[Last_Date] => NA
[Time] => NA
)
)
)
所以我的最终结果是
Array
(
[0] => Array
(
[Id] => 151601
[First_Name] => JOHN
[Last_Name] => DOE
[Location_Id] => 10
[Positions] => Array
(
[North] => Array
(
[Current_Level] => 4
[Last_Date] => 11/7/2001
[Time] => 4:15 AM
)
[East] => Array
(
[Current_Level] => 4
[Last_Date] => 7/10/2003
[Time] => 7:30 PM
)
)
)
这是我目前正在尝试的,但它引发了非法偏移类型错误。我想我只是没有取消正确的事情。我可以让它回显所有正确的子数组,但是当我尝试取消设置时,我得到一个偏移错误。
foreach($records as $record) {
foreach ($record as $value) {
if (is_array($value)) {
foreach ($value as $position) {
if($position["Time"] == "NA") {
unset($records[$record][$value]);
}
}
}
}
}
解决方案
通过引用和过滤函数传递数组元素,您可以将代码简化为:
foreach($records as &$record) {
$record['Positions'] = array_filter(
$record['Positions'],
function ($v) {
return $v['Time'] !== 'NA';
}
);
}
在这里拉小提琴。
推荐阅读
- ruby - 如何测试具有本地 GEM 依赖项的 GEM,$LOADED_FEATURES 未指向我的本地 GEM
- ios - Xcode 和 SwiftUI - 如何重置画布?
- apache - 如何通过apache下载文件?
- python - Jupyter 上的雪花连接器
- python - 分类数据的线性回归
- reactjs - 无法让 Heroku App 运行,但我可以让它在本地运行
- azure - 如何在 Azure ADF 中进行行转换?
- rust - 为什么从
for U在 Rust 中意味着 Into for T? - android - 约束布局包装文本视图,但约束宽度太长而无法让其他视图可见
- ios - 如何使 UITextView 根据文本长度进行调整?