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

时间:2018-07-18 19:06:42

标签: php arrays multidimensional-array

我在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的数组,但是我只想删除键中具有最新日期的包含joe的数组{1}}。以下输出是我要完成的工作:

1

除了遍历每个数组之外,是否有一种简单的方法可以在PHP中实现此目的?

2 个答案:

答案 0 :(得分:3)

这是一种非循环方法,该方法使用array_intersect和array_column查找“乔的”,然后删除最大的array_key,因为我首先对日期进行了排序。

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

如果您想重置数组中的键,编辑会忘记添加array_values()。

只需在取消设置后添加$arr = array_values($arr);

答案 1 :(得分:1)

我会这样处理:

<?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。按日期排序。按键删除最新的