ste*_*tef 1058 php arrays sorting multidimensional-array
如何通过"order"键的值对此数组进行排序?尽管这些值目前是连续的,但它们并不总是如此.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
Run Code Online (Sandbox Code Playgroud)
Chr*_*der 1624
尝试usort,如果你仍然在PHP 5.2或更早版本,你必须先定义一个排序函数:
function sortByOrder($a, $b) {
return $a['order'] - $b['order'];
}
usort($myArray, 'sortByOrder');
Run Code Online (Sandbox Code Playgroud)
从PHP 5.3开始,您可以使用匿名函数:
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
Run Code Online (Sandbox Code Playgroud)
最后使用PHP 7,您可以使用太空船运营商:
usort($myArray, function($a, $b) {
return $a['order'] <=> $b['order'];
});
Run Code Online (Sandbox Code Playgroud)
要将其扩展到多维排序,如果第一个为零,则引用第二个/第三个排序元素 - 下面将对此进行最佳说明.您还可以使用它来对子元素进行排序.
usort($myArray, function($a, $b) {
$retval = $a['order'] <=> $b['order'];
if ($retval == 0) {
$retval = $a['suborder'] <=> $b['suborder'];
if ($retval == 0) {
$retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
}
}
return $retval;
});
Run Code Online (Sandbox Code Playgroud)
如果需要保留关键关联,请使用uasort()
- 请参阅手册中数组排序功能的比较
o0'*_*0'. 278
function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
$sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
$ret[$ii]=$array[$ii];
}
$array=$ret;
}
aasort($your_array,"order");
Run Code Online (Sandbox Code Playgroud)
Tom*_*igh 263
我用这个函数:
function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
$sort_col = array();
foreach ($arr as $key=> $row) {
$sort_col[$key] = $row[$col];
}
array_multisort($sort_col, $dir, $arr);
}
array_sort_by_column($array, 'order');
Run Code Online (Sandbox Code Playgroud)
Jan*_*bry 68
我通常使用usort,并传递我自己的比较函数.在这种情况下,它非常简单:
function compareOrder($a, $b)
{
return $a['order'] - $b['order'];
}
usort($array, 'compareOrder');
Run Code Online (Sandbox Code Playgroud)
aju*_*o91 33
实现这一目标的一种方法是这样的
$new = [
[
'hashtag' => 'a7e87329b5eab8578f4f1098a152d6f4',
'title' => 'Flower',
'order' => 3,
],
[
'hashtag' => 'b24ce0cd392a5b0b8dedc66c25213594',
'title' => 'Free',
'order' => 2,
],
[
'hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b',
'title' => 'Ready',
'order' => 1,
],
];
$keys = array_column($new, 'order');
array_multisort($keys, SORT_ASC, $new);
var_dump($new);
Run Code Online (Sandbox Code Playgroud)
结果:
Array
(
[0] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
)
Run Code Online (Sandbox Code Playgroud)
Nit*_*dbz 16
$sort = array();
$array_lowercase = array_map('strtolower', $array_to_be_sorted);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $alphabetically_ordered_array);
Run Code Online (Sandbox Code Playgroud)
这会处理大写和小写字母.
B.K*_*B.K 12
要按"标题"键的值对数组进行排序,请使用:
uasort($myArray, function($a, $b) {
return strcmp($a['title'], $b['title']);
});
Run Code Online (Sandbox Code Playgroud)
strcmp比较字符串.
uasort()维护定义的数组键.
正如接受的答案所述,您可以使用:
usort($myArray, function($a, $b) {
return $a['order'] <=> $b['order'];
});
Run Code Online (Sandbox Code Playgroud)
如果您需要按多列排序,那么您将执行以下操作:
usort($myArray, function($a, $b) {
return [$a['column1'],$a['column2']] <=> [$b['column1'],$b['column2']];
});
Run Code Online (Sandbox Code Playgroud)
这可以扩展到数据中的任意数量的列。这依赖于您可以在 PHP 中直接比较数组的事实。在上面的示例中,数组将首先按 排序column1
,然后按 排序column2
。但您可以按任何顺序对列进行排序,例如:
usort($myArray, function($a, $b) {
return [$a['column2'],$a['column1']] <=> [$b['column2'],$b['column1']];
});
Run Code Online (Sandbox Code Playgroud)
如果您需要对一列进行升序排序,对另一列进行降序排序,请将降序列交换到运算符的另一侧<=>
:
usort($myArray, function($a, $b) {
return [$a['column1'],$b['column2']] <=> [$b['column1'],$a['column2']];
});
Run Code Online (Sandbox Code Playgroud)
使用array_multisort(),array_map()
array_multisort(array_map(function($element) {
return $element['order'];
}, $array), SORT_ASC, $array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)
PHP 7.4及更高版本的工作“箭头函数”语法:
uasort($yourArray, fn($a, $b) => $a['order'] <=> $b['order']);
Run Code Online (Sandbox Code Playgroud)
漂亮的印刷品
echo '<pre>';
print_r($yourArray);
Run Code Online (Sandbox Code Playgroud)
最灵活的方法是使用这种方法:
Arr::sortByKeys(array $array, $keys, bool $assoc = true): array
Run Code Online (Sandbox Code Playgroud)
原因如下:
您可以按任何键排序(也可以嵌套,例如'key1.key2.key3'
或['k1', 'k2', 'k3']
)
它适用于关联数组和非关联数组($assoc
标志)
它不使用引用 - 它返回一个新的排序数组
在你的情况下,它会很简单:
$sortedArray = Arr::sortByKeys($array, 'order');
Run Code Online (Sandbox Code Playgroud)
这个方法是这个库的一部分。
归档时间: |
|
查看次数: |
758415 次 |
最近记录: |