[英]Sort multilevel array on sub key value in PHP
我想按price
值的升序對多級數組進行排序。
{
"pData": [
{
"name": "Walmart",
"address": "Full Address for Walmart",
"pricing": [{
"id": "Samsung Galaxy 21M",
"price": 157.0,
}],
},
{
"name": "Stop & Shop",
"address": "Full Address for Stop & Shop",
"pricing": [{
"id": "Samsung Galaxy 21M",
"price": 142.0,
}],
},
{
"name": "Safeway",
"address": "Full Address for Safeway",
"pricing": [{
"id": "Samsung Galaxy 21M",
"price": 148.0,
}],
}
],
"status ":" ok "
}
我嘗試了下面的代碼,但給出了相同的結果,而沒有對price
鍵的值進行排序。 我什至在這個網站上嘗試了許多來自不同答案的類似代碼,但都沒有工作。 所以請告知我的代碼有什么問題或建議完全不同的代碼。
function cmp($a, $b)
{
//if ($a["price"] == $b["price"]) // Try #1
if($a["pData"]["pricing"]["price"] == $b["pData"]["pricing"]["price"]) // Try #2
{
return 0;
}
return ($a["price"] < $b["price"]) ? -1 : 1; // Try #1
return ($a["pData"]["pricing"]["price"] < $b["pData"]["pricing"]["price"]) ? -1 : 1;
}
usort($result,"cmp");
print_r($result);
你應該非常接近你所擁有的。 您不需要回調中的 pData 索引,而是將 $result['pData'] 傳遞給 usort。
function cmp($a, $b)
{
if ($a["pricing"][0]["price"] == $b["pricing"][0]["price"])
{
return 0;
}
return ($a["pricing"][0]["price"] < $b["pricing"][0]["price"]) ? -1 : 1;
}
usort($result["pData"],"cmp");
print_r($result);
我剛剛注意到您在定價元素中有一個對象數組,因此以當前形式對 pData 元素進行排序將有問題。 您可能希望首先將所有定價元素提取到一個單獨的數據結構中,然后對該新結構進行排序。 像這樣的事情可能會幫助您獲得更好的工作解決方案:
$tmp = array();
foreach ($result["pData"] as $pData) {
foreach ($pData["pricing"] as $pricing) {
$tmp[] = array(
"name" => $pData["name"],
"address" => $pData["address"],
"id" => $pricing["id"],
"price" => $pricing["price"]
);
}
}
function cmp($a, $b)
{
if ($a["price"] == $b["price"])
{
return 0;
}
return ($a["price"] < $b["price"]) ? -1 : 1;
}
usort($tmp,"cmp");
print_r($tmp);
您可以使用飛船運算符<=>
也稱為三向比較運算符。
usort($result["pData"], function ($a, $b) {
return $a["pricing"][0]["price"] <=> $b["pricing"][0]["price"];});
對於帶有箭頭功能的 PHP 7.4。
usort($result["pData"], fn($a, $b) => $a["pricing"][0]["price"] <=> $b["pricing"][0]["price"]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.