代码之家  ›  专栏  ›  技术社区  ›  Austin

php从多维数组中删除特定数组

  •  0
  • Austin  · 技术社区  · 6 年前

    我在php中有一个多维数组,需要根据其中一个数组中某个项的值删除一个数组:

    示例数组

    array(
       "0"=>array("0"=>"joe", "1"=>"2018-07-18 09:00:00"),
       "1"=>array("0"=>"tom", "1"=>"2018-07-17 09:00:00"),
       "2"=>array("0"=>"joe", "1"=>"2018-07-14 09:00:00")
    )
    

    我知道我想删除包含 joe 关键 0 ,但我只想删除包含 以最新日期为关键字 1 是的。以下是我要完成的工作:

    array(
       "0"=>array("0"=>"tom", "1"=>"2018-07-17 09:00:00"),
       "1"=>array("0"=>"joe", "1"=>"2018-07-14 09:00:00")
    ) 
    

    除了在每个数组中循环之外,在php中有没有一种简单的方法可以做到这一点?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Andreas    6 年前

    这里是一个非循环方法,它使用ARARYAX交叉点和ARARYY列来查找“乔”,然后从第一次对日期排序数组删除最大的ARRAYHYKEY。

    usort($arr, function($a, $b) {
        return $a[1] <=> $b[1];
    }); // This returns the array sorted by date
    
    // Array_column grabs all the names in the array to a single array.
    // Array_intersect matches it to the name "Joe" and returns the names and keys of "Joe"
    $joes = array_intersect(array_column($arr, 0), ["joe"]);
    
    // Array_keys grabs the keys from the array as values
    // Max finds the maximum value (key)
    $current = max(array_keys($joes));
    unset($arr[$current]);
    
    var_dump($arr);
    

    https://3v4l.org/mah6K

    如果要重置数组中的键,请编辑忘记添加数组的值。

    只需添加 $arr = array_values($arr); 不稳定之后。

        2
  •  1
  •   ficuscr    6 年前

    我会这样说:

    <?php
     $foo = array(
       "0"=>array("0"=>"joe", "1"=>"2018-07-18 09:00:00"),
       "1"=>array("0"=>"tom", "1"=>"2018-07-17 09:00:00"),
       "2"=>array("0"=>"joe", "1"=>"2018-07-14 09:00:00")
    );
    
    
    $tmp = [];  
    foreach($foo as $k => $v) {
        if ($v[0] === 'joe') {
            $tmp[$v[1]] = $k;
        }
    }
    if (!empty($tmp)) {
        sort($tmp);  //think that is sane with date format?
        unset($foo[reset($tmp)]);
    }
    
    var_dump($foo);
    

    不确定你是否不想在主体上循环或什么…我倾向于追求可读性。查找所有出现的 joe 是的。按日期排序。按键删除最近的。