我在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中实现此目的?
答案 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);
如果您想重置数组中的键,编辑会忘记添加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
。按日期排序。按键删除最新的