【问题标题】:Find value and remove first level key from multi-dimensional array从多维数组中查找值并删除第一级键
【发布时间】:2012-07-26 00:51:48
【问题描述】:

这是我的数组。

我正在尝试查找特定日期并从数组中删除整个键(对应的 start_time 和 end_time。

    $c = array
    // Search all end_times        
    $remove = '2012-06-24 17:00:59';

数组(2) {

[0]=>
数组(2) {

[0]=>
数组(2) {

["ID"]=> string(2) "15"
["start_time"]=> string(19) "2012-06-24 08:00:00"

}

[1]=>
数组(2) {

["ID"]=> string(2) "15"
["end_time"]=> string(19) "2012-06-24 17:00:59"

}

}

[1]=>
数组(2) {

[0]=>
数组(2) {

["ID"]=> string(2) "28"
["start_time"]=> string(19) "2012-07-26 18:00:00"

}

[1]=>
数组(2) {

["ID"]=> string(2) "28"
["end_time"]=> string(19) "2012-07-26 22:00:59"

}

}

}

这是我到目前为止的代码。它仅在针对第一个 start_time 或第二个 end_time 时才有效,这向我表明计数在某处丢失了。我对 PHP 还很陌生,所以我对接下来会发生什么一无所知。

   // recursive array search, look for value, remove key
   for ($i = 0, $count = count($c); $i < $count; $i++) {
       if ($c[$i][$i]['end_time'] == $remove) {
           unset($c[$i]);
   } 
   }

不胜感激!
问候

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:
    foreach ($c as $k=>$v) {
       foreach ($v as $line) {
          $times = array('start_time', 'end_time');
          foreach ($times as $time) {
             if ($line[$time] == $remove) {
                unset($c[$k]);
             }
          }
       }
    }
    

    如果我理解正确,应该做你正在寻找的东西。

    编辑:基本上它所做的是获取原始数组的每个成员并搜索该父数组的每个成员以获取删除时间。如果找到它,它会删除整个“树”。

    【讨论】:

    • 在最后添加了另一个花括号,但抱歉似乎不起作用
    • 如果您不介意,也请投票赞成这个答案。非常感谢。
    • 如果我想反转呢?例如if ($line[$time] != $keep) { -- 这不像我预期的那样工作返回 array(0) { }
    • 应该是if ($line[$time] != $remove 不知道你想做什么
    • 我刚刚意识到它需要反过来。如果我将 == 更改为 != 它会中断。感谢您的快速跟进!
    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多