[英]PHP Multidimensional array sort keeping one element value at first position
I have a multidimensional array named $newArray have below values: 我有一个名为$ newArray的多维数组,其值如下:
$newArray =
(
[0] => Array
(
[CountryID] => 24
[val] => 1
[PostID] => 1
[id] => 0
)
[1] => Array
(
[CountryID] => 355
[val] => 0.1
[PostID] => 2
[id] => 1
)
[2] => Array
(
[CountryID] => 241
[val] => 0.3
[PostID] => 3
[id] => 2
)
[3] => Array
(
[CountryID] => 135
[val] => 0.02
[PostID] => 4
[id] => 3
)
[4] => Array
(
[CountryID] => 24
[val] => 0.003
[PostID] => 5
[id] => 4
)
[5] => Array
(
[CountryID] => 355
[val] => 5
[PostID] => 6
[id] => 5
)
[6] => Array
(
[CountryID] => 355
[val] => 4
[PostID] => 23
[id] => 6
)
[7] => Array
(
[CountryID] => 24
[val] => 2
[PostID] => 1
[id] => 7
)
[8] =>
)
I want to sort [CountryID]
in DESC, [val]
in DESC order only after filtering one element value "24" of [CountryID]
on top (with [val]
DESC of course), so result should be below: 我要排序[CountryID]
在DESC, [val]
在DESC顺序过滤一种元素值“24”的后只[CountryID]
在上面(与[val]
当然DESC),所以结果应该是以下:
$newArray =
(
[1] => Array
(
[CountryID] => 24
[val] => 2
[PostID] => 1
[id] => 7
)
[2] => Array
(
[CountryID] => 24
[val] => 1
[PostID] => 1
[id] => 0
)
[3] => Array
(
[CountryID] => 24
[val] => 0.003
[PostID] => 5
[id] => 4
)
[4] => Array
(
[CountryID] => 355
[val] => 5
[PostID] => 6
[id] => 5
)
[5] => Array
(
[CountryID] => 355
[val] => 4
[PostID] => 23
[id] => 6
)
[6] => Array
(
[CountryID] => 355
[val] => 0.1
[PostID] => 2
[id] => 1
)
[7] => Array
(
[CountryID] => 241
[val] => 0.3
[PostID] => 3
[id] => 2
)
[8] => Array
(
[CountryID] => 135
[val] => 0.02
[PostID] => 4
[id] => 3
)
)
What function I should use here in order to sort a multidimensional array with above order and condition? 为了对具有上述顺序和条件的多维数组排序,我应该在这里使用什么函数?
I am still learning arrays in php and limited knowledge of that. 我仍在学习php数组,对此知识有限。
You can extract value which you need later, and filter the array to avoid warning. 您可以提取以后需要的值,并对数组进行过滤以避免警告。
$inputSearch = 24;
$k = array_keys(array_column($newArray, 'CountryID'), 24);
foreach($k as $v){
$temp[] = $newArray[$v];
unset($newArray[$v]);
}
array_multisort(array_column($temp, 'val'), SORT_DESC, $temp);
$newArray = array_filter($newArray);
array_multisort(array_column($newArray, 'CountryID'), SORT_DESC,array_column($newArray, 'val'), SORT_DESC,$newArray);
$newArray = array_merge($temp , $newArray);
print_r($newArray);
array_column - Return the values from a single column in the input array array_column-从输入数组中的单个列返回值
array_filter - Filters elements of an array using a callback function array_filter-使用回调函数过滤数组的元素
array_search — Searches the array for a given value and returns the first corresponding key if successful array_search —在数组中搜索给定值,如果成功,则返回第一个对应的键
array_multisort — Sort multiple or multi-dimensional arrays array_multisort —对多维或多维数组进行排序
array_unshift — Prepend one or more elements to the beginning of an array array_unshift —在数组的开头添加一个或多个元素
array_keys — Return all the keys or a subset of the keys of an array array_keys —返回数组的所有键或键的子集
Output 产量
Array
(
[0] => Array
(
[CountryID] => 24
[val] => 2
[PostID] => 1
[id] => 7
)
[1] => Array
(
[CountryID] => 24
[val] => 1
[PostID] => 1
[id] => 0
)
[2] => Array
(
[CountryID] => 24
[val] => 0.003
[PostID] => 5
[id] => 4
)
[3] => Array
(
[CountryID] => 355
[val] => 5
[PostID] => 6
[id] => 5
)
[4] => Array
(
[CountryID] => 355
[val] => 4
[PostID] => 23
[id] => 6
)
[5] => Array
(
[CountryID] => 355
[val] => 0.1
[PostID] => 2
[id] => 1
)
[6] => Array
(
[CountryID] => 241
[val] => 0.3
[PostID] => 3
[id] => 2
)
[7] => Array
(
[CountryID] => 135
[val] => 0.02
[PostID] => 4
[id] => 3
)
)
Using usort you can solve your problem. 使用usort可以解决您的问题。 Example: 例:
usort($newArray, function($a, $b) {
if ($a['CountryID'] == 135 OR $b['CountryID'] == 135) return 1;
$retval = $b['CountryID'] - $a['CountryID'];
if ($retval == 0) {
$retval = $b['val'] - $a['val'];
}
return $retval;
});
echo '<pre>', print_r($newArray);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.