我有一個 PHP 陣列,我需要根據tlp_queue_manager_schedulers物件中的鍵找到一個專案,我嘗試這樣做array_search,但這回傳了 false,我還嘗試將此方法與array_column:
[
{
"tlp_queue_manager_schedulers":{
"id":"1",
"token":"ABC"
},
"0":{
"num":"1"
}
},
{
"tlp_queue_manager_schedulers":{
"id":"3",
"token":"cron-3"
},
"0":{
"num":"2"
}
},
{
"tlp_queue_manager_schedulers":{
"id":"4",
"token":"CronA75nvAgjsm8b"
},
"0":{
"num":"3"
}
},
{
"tlp_queue_manager_schedulers":{
"id":"2",
"token":"XYZ"
},
"0":{
"num":"4"
}
}
]
例如,我需要回傳與3id中的鍵tlp_queue_manager_schedulers匹配的陣列項,然后應該回傳:
{
"tlp_queue_manager_schedulers":{
"id":"3",
"token":"cron-3"
},
"0":{
"num":"2"
}
}
uj5u.com熱心網友回復:
很好的foreach回圈。沒有什么比foreach回圈更好的了:
$matchingObject = null;
foreach($array as $obj)
{
if($obj->tlp_queue_manager_schedulers->id == "3")
{
$matchingObject = $obj;
}
}
uj5u.com熱心網友回復:
你可以試試 find() 方法
var result = array.find(x => x.tlp_queue_manager_schedulers.id === '3');
console.log(result);
https://jsfiddle.net/kenpy/trj543xy/24/
uj5u.com熱心網友回復:
雖然foreach@Quasipickle 的回圈也將是我的主要修復,因為我們有一個“簡潔挑戰”與 Javascript 的array.find()方法,這里有一個 PHP單線array_filter:
$matches = array_filter($data,
fn($row) => $row['tlp_queue_manager_schedulers']['id'] == '3'
);
給出樣本資料后,將回傳:
array(1) {
[1] · array(2) {
["tlp_queue_manager_schedulers"] · array(2) {
["id"] · string(1) "3"
["token"] · string(6) "cron-3"
}
[0] · array(1) {
["num"] · string(1) "2"
}
}
}
請注意,這將回傳一個包含所有符合條件的專案的陣列(保留原始索引)。如果沒有找到匹配項,則回傳一個空陣列。如果你只對第一場比賽感興趣,那么$match = current($matches);(no matches: false) 或$match = array_shift($matches);(no matches: null) 會給你那個。
如果您有一個大型資料集并且只關心找到第一個匹配項,那么foreach找到break后匹配項(或者return如果您的回圈位于輔助函式內)可能會為您節省大量冗余回圈,因為array_filter將檢查整個陣列'直到最后。(對于小型資料集,差異將無關緊要)。
PS 如果您想知道為什么array_search不起作用:它只查看陣列值,您無法指定要檢查的鍵。即使您第一次使用array_column,您的列仍然是關聯陣列。您可以使用這些功能和一定程度的技巧來完成此操作,但這將是一個漫長而復雜的解決方案......最好保持簡單和干凈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/468411.html
上一篇:資料為JSONLaravel
