[英]How to sort array value using the key in PHP
我需要一个帮助。我正在使用键值对数组进行排序,我需要如果一个键值相同,那么它应该再次按字母顺序排列。请让我在下面解释我的代码。
{"data":[
{"subcat_id":"9","subcat_name":"SUSHI","order":"9"},
{"subcat_id":"20","subcat_name":"APPETIZERS","order":"6"},
{"subcat_id":"6","subcat_name":"CHINESE","order":"4"},
{"subcat_id":"26","subcat_name":"BRUNCH","order":"4"},
{"subcat_id":"17","subcat_name":"ENTREES","order":"3"},
{"subcat_id":"25","subcat_name":"HAPPY HOUR","order":"2"}
]}
如果order值相同( lets say-order->4
),则应该按照subcat_name
( BRUNCH,CHINESE
)的字母顺序subcat_name
。
您必须按订单ID创建组,然后对其进行排序。
$json = '{"data":[
{"subcat_id":"9","subcat_name":"SUSHI","order":"9"},
{"subcat_id":"20","subcat_name":"APPETIZERS","order":"6"},
{"subcat_id":"6","subcat_name":"CHINESE","order":"4"},
{"subcat_id":"26","subcat_name":"BRUNCH","order":"4"},
{"subcat_id":"17","subcat_name":"ENTREES","order":"3"},
{"subcat_id":"25","subcat_name":"HAPPY HOUR","order":"2"}
]}';
$data = json_decode($json);
$ordersGroups = array();
foreach ($data->data as $orderData) {
if (!isset($ordersGroups[$orderData->order])) {
$ordersGroups[$orderData->order] = array($orderData);
} else {
$ordersGroups[$orderData->order][] = $orderData;
}
}
$ordersGroups = array_map(function ($orders) {
usort($orders, function ($a, $b) {
return strcmp($a->subcat_name, $b->subcat_name);
});
return $orders;
}, $ordersGroups);
$data->data = array_reduce($ordersGroups, function ($carry, $orderGroup) {
return array_merge($carry, $orderGroup);
}, array());
$json = json_encode($data);
这可能起作用:
$array = //decode your JSON as an array here
$innerComparison = function ($v1, $v2) {
return strcmp($v1["subcat_name"],$v2["subcat_name"]);
};
$mainComparison = function ($v1, $v2) use ($innerComparison) {
if ($v1["order"] === $v2["order"]) {
return $innerComparison($v1,$v2);
} else {
return $v1["order"] < $v2["order"]:-1:1;
}
};
usort($array["data"], $mainComparison);
您可以使用usort()
。 假设您的数据存储在$obj
对象中:
usort
(
$obj->data,
function( $a, $b )
{
if( $a->order == $b->order ) return strcmp( $a->subcat_name, $b->subcat_name );
return $a->order - $b->order;
}
);
上面的函数根据您的要求对$obj->data
进行排序。
usort()
使用自定义函数对数组进行排序,该函数接收数组的两个元素作为参数:如果第一个参数分别小于,等于或等于0,则返回的函数值必须是小于,等于或大于零的整数。等于或大于秒。
在您的情况下,如果->order
键等于,则使用strcmp()
返回基于->subcat_name
排序值,否则我们返回两个->order
值之间的差。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.