Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按键值对数组排序_Php_Arrays_Sorting - Fatal编程技术网

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类型。但我需要它像这样排序第一种|第二种|第一种|第二种|等等。谢谢!对不起,也许安排更具描述性?