我有一個需要唯一的陣列,我需要有一個條件來檢查值dis是否處于 ANSWERED 狀態。如果是,則保留它并洗掉處于 NO ANSWER 狀態的行。
這是我的完整陣列
Array
(
[0] => Array
(
[dest] => 960
[dis] => ANSWERED
)
[1] => Array
(
[dest] => 596
[dis] => NO ANSWER
)
[2] => Array
(
[dest] => 596
[dis] => ANSWERED
)
[3] => Array
(
[dest] => 595
[dis] => NO ANSWER
)
[4] => Array
(
[dest] => 595
[dis] => NO ANSWER
)
)
洗掉重復項后:
Array
(
[dest] => 960
[dis] => ANSWERED
)
Array
(
[dest] => 596
[dis] => NO ANSWER
)
Array
(
[dest] => 596
[dis] => ANSWERED
)
Array
(
[dest] => 595
[dis] => NO ANSWER
)
with this code :
foreach(array_unique($testArr, SORT_REGULAR) as $doc)
{
print_r($doc);
}
我現在需要做的是洗掉沒有答案的陣列 [1],因為陣列 [2] 帶有鍵:dis 已回答
uj5u.com熱心網友回復:
您可以分兩步完成:
<?php
$data = [
['dest' => 960, 'dis' => 'ANSWERED'],
['dest' => 596, 'dis' => 'NO ANSWER'],
['dest' => 596, 'dis' => 'ANSWERED'],
['dest' => 595, 'dis' => 'NO ANSWER'],
['dest' => 595, 'dis' => 'NO ANSWER'],
];
// Step 1: Filtering step
$intermediate = [];
foreach ($data as $item) {
if (!isset($intermediate[$item['dest']])) {
$intermediate[$item['dest']] = $item['dis'];
} elseif ($item['dis'] === 'ANSWERED') {
$intermediate[$item['dest']] = $item['dis'];
}
}
// Step 2: Rebuild to final format
$result = [];
foreach ($intermediate as $key => $value) {
$result[] = ['dest' => $key, 'dis' => $value];
}
print_r($result);
給出:
Array
(
[0] => Array
(
[dest] => 960
[dis] => ANSWERED
)
[1] => Array
(
[dest] => 596
[dis] => ANSWERED
)
[2] => Array
(
[dest] => 595
[dis] => NO ANSWER
)
)
uj5u.com熱心網友回復:
在將行推入結果陣列的同時迭代分配臨時鍵。此外,如果 dest 尚未在結果陣列中表示,或者如果 dis 是 ANSWERED,則存盤該行。
代碼:(演示)
$result =[];
foreach ($data as $row) {
if (!isset($result[$row['dest']]) || $row['dis'] === 'ANSWERED') {
$result[$row['dest']] = $row;
}
}
var_export(array_values($result)); // reindex the result array
uj5u.com熱心網友回復:
您可以使用 array_map 函式
function fun2($v1)
{
if ($v1->dis=='ANSWERED') return $v;
}
$finalArray = array_map("fun1", $testArr));
print_r($finalArray)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/396414.html
上一篇:帶有php的FTP下載檔案夾
