我在下面有以下数组:
$array = array(
'90' => array (
'11:00' => array(
' dept' => 297
),
'11:01' => array(
'dept' => 297
),
'11:02' => array(
' dept' => 884
),
'11:03' => array(
'dept' => 297
),
),
'91' => array (
'11:00' => array(
'dept' => 297
),
'11:01' => array(
'dept' => 297
),
)
);
90和91是用户ID。现在在90和91键内我想删除连续值,例如dept 297它应该只返回一次。 我想要的输出是:
$array = array(
'90' => array (
'11:00' => array(
'dept' => 297
),
'11:02' => array(
' dept' => 884
),
'11:03' => array(
'dept' => 297
),
),
'91' => array (
'11:00' => array(
'dept' => 297
),
)
);
如你所见,dept id 297只返回一次。
我尝试了以下代码:
function filterSuccessiveDuplicates($array)
{
$result = array();
$lastValue = null;
foreach ($array as $arr =>$value){
$value = array_values($value);
foreach($value as $k => $v){
if ($v['dept'] !== $lastValue) {
$result[$arr][$k] = $v;
}
$lastValue = $v['dept'];
}
}
return $result;
}
print_r(filterSuccessiveDuplicates($array));
但它不起作用。输出不是我想要的。有什么帮助吗?
答案 0 :(得分:1)
你只需要将$ lastValue保留在第一个循环中。然后删除array_values()
function filterSuccessiveDuplicates($array)
{
$result = array();
foreach ($array as $arr =>$value){
$lastValue = null;
foreach($value as $k => $v){
if ($v['dept'] !== $lastValue) {
$result[$arr][$k] = $v;
}
$lastValue = $v['dept'];
}
}
return $result;
}
print_r(filterSuccessiveDuplicates($array));
我测试了它..效果很好。
这是输出。
Array
(
[90] => Array
(
[11:01] => Array
(
[dept] => 297
)
[11:02] => Array
(
[ dept] => 884
)
[11:03] => Array
(
[dept] => 297
)
)
[91] => Array
(
[11:00] => Array
(
[dept] => 297
)
)
)