Php 按键值对数组排序
所以我有这个数组Php 按键值对数组排序,php,arrays,sorting,Php,Arrays,Sorting,所以我有这个数组 Array ( [0] => Array ( [key_1] => something [type] => first_type ) [1] => Array ( [key_1] => something_else [type] => first_type )
Array
(
[0] => Array
(
[key_1] => something
[type] => first_type
)
[1] => Array
(
[key_1] => something_else
[type] => first_type
)
[2] => Array
(
[key_1] => something_else_3
[type] => second_type
)
[3] => Array
(
[key_1] => something_else_4
[type] => second_type
)
)
我必须按照如下模式按类型值进行排序:
first_type
second_type
first_type
second_type
$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });
我的问题是,我该怎么做
非常感谢 如果sort()
及其相关备选方案不起作用,则必须使用带有自定义函数的usort()
或uasort()
对该数组进行排序。如果sort()
及其相关备选方案不起作用,则必须使用usort()
或uasort())
使用自定义函数对该数组进行排序。您需要使用自定义比较函数来比较每个项目的键1
子键(您可以方便地使用它)。假设您不想更改结果数组的结构,它将如下所示:
Array
(
[0] => Array
(
[key_1] => something
[type] => first_type
)
[1] => Array
(
[key_1] => something_else
[type] => first_type
)
[2] => Array
(
[key_1] => something_else_3
[type] => second_type
)
[3] => Array
(
[key_1] => something_else_4
[type] => second_type
)
)
first_type
second_type
first_type
second_type
$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });
您需要与一个自定义比较函数一起使用,该函数比较每个项目的key_1
子键(您可以方便地使用它)。假设您不想更改结果数组的结构,它将如下所示:
first_type
second_type
first_type
second_type
$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });
下面是我如何让它工作的:
function filter_by_value($array, $index, $value) {
if(is_array($array) && count($array) > 0) {
foreach(array_keys($array) as $key){
$temp[$key] = $array[$key][$index];
if ($temp[$key] == $value){
$newarray[$key] = $array[$key];
}
}
}
return $newarray;
}
$array = /* array here */
$type1 = array_values(filter_by_value($array, 'type', '1'));
$type2 = array_values(filter_by_value($array, 'type', '2'));
$i = 1; $x = 1; $y = 1;
$sorted = array();
foreach ($array as $a) {
if ($i % 2) {
$sorted[$i-1] = $type1[$x-1];
$x++;
} else {
$sorted[$i-1] = $type2[$y-1];
$y++;
}
$i++;
}
在php.net上找到了filter_by_value(),但我不记得是在哪里找到的,这不是我做的。
也许这不是最好的解决方案,但它工作得很好。因此,以下是我如何让它工作的:
function filter_by_value($array, $index, $value) {
if(is_array($array) && count($array) > 0) {
foreach(array_keys($array) as $key){
$temp[$key] = $array[$key][$index];
if ($temp[$key] == $value){
$newarray[$key] = $array[$key];
}
}
}
return $newarray;
}
$array = /* array here */
$type1 = array_values(filter_by_value($array, 'type', '1'));
$type2 = array_values(filter_by_value($array, 'type', '2'));
$i = 1; $x = 1; $y = 1;
$sorted = array();
foreach ($array as $a) {
if ($i % 2) {
$sorted[$i-1] = $type1[$x-1];
$x++;
} else {
$sorted[$i-1] = $type2[$y-1];
$y++;
}
$i++;
}
在php.net上找到了filter_by_value(),但我不记得是在哪里找到的,这不是我做的。
也许这不是最好的解决方案,但效果很好。我想你得自己写;
[type]
嵌套在它自己的数组中这一事实意味着标准PHP函数将发现这一点很棘手,尽管您应该尝试使用sort()
和friends来查看它们吐出了什么。首先,您应该更清楚您的排序模式。即使你说有,我也没看到。那么您的排序规范是什么呢?假设我有类型键,值可以是1或2。我需要这样分类:1 2 1 2 1 2。。。等等,我想你得自己写这封信;[type]
嵌套在它自己的数组中这一事实意味着标准PHP函数将发现这一点很棘手,尽管您应该尝试使用sort()
和friends来查看它们吐出了什么。首先,您应该更清楚您的排序模式。即使你说有,我也没看到。那么您的排序规范是什么呢?假设我有类型键,值可以是1或2。我需要这样分类:1 2 1 2 1 2。。。等等。这样对数组进行排序:所有第一个\u类型,然后所有第二个\u类型。但我需要它像这样排序第一种|第二种|第一种|第二种|等等。谢谢!很抱歉,arrange可能更具描述性?这将按如下方式对数组进行排序:所有第一个\u类型,然后所有第二个\u类型。但我需要它像这样排序第一种|第二种|第一种|第二种|等等。谢谢!对不起,也许安排更具描述性?