Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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_Multidimensional Array - Fatal编程技术网

使用php按降序对三级嵌套数组排序

使用php按降序对三级嵌套数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,如何按sorder降序排列下列数组?整个数组被认为是降序排序的一个数组。我看到了其他一些类似的问题,但没有一个对我有帮助 Array ( [0] => Array ( [0] => Array ( [id] => 2208 [status] => u13333333333333

如何按
sorder
降序排列下列数组?整个数组被认为是降序排序的一个数组。我看到了其他一些类似的问题,但没有一个对我有帮助

    Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 2208
                    [status] => u13333333333333
                    [user_id] => 6
                    [sorder] => 3

                )

            [1] => Array
                (
                    [id] => 2208
                    [status] => user111111111111111
                    [user_id] => 6
                    [sorder] => 1
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [id] => 2209
                    [status] => u222222222222222222222
                    [user_id] => 5
                    [sorder] => 2

                )

        )

)
编辑 可能这是二维数组的另一种形式

Array
(
    [userPosts] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [id] => 2208
                            [status] => u13333333333333
                            [user_id] => 2208
                            [sorder] => 3
                        )

                    [1] => Array
                        (
                            [id] => 2208
                            [status] => user111111111111111
                            [user_id] => 2208
                            [sorder] => 1

                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [id] => 2209
                            [status] => u222222222222222222222
                            [user_id] => 2209
                            [sorder] => 2

                        )

                )

        )

)

要维护两个主阵列还是将它们合并为一个?下面是一个结合如下内容的解决方案:

<?php

// merge branches of array
$array = array_merge($yourarray[0], $yourarray[1]);
$sorders = array();

foreach($array as $key => $current) {
    foreach($current as $subkey => $value) {
        // create new array with sorder as key, original key as value
        $sorders[$value['sorder']] = $subkey;   
    }
}

// sort by key (sorder)
ksort($sorders);

// create new array with ordered results
$new_array = array();
foreach($sorders as $sorder => $subkey) {

    // add values back
    $new_array[] = $array[0][$subkey];

}

print_r($new_array);

?>


另一个问题是这个数组最初是如何创建的?您可能会发现,无论生成它的是什么(如果它是某种框架的话),在按该字段检索要排序的数据时,都可能会给您一个选项。如果您是通过自己的查询(比如MySQL)获得它,那么最好在SQL查询中按该字段排序,而不是在…之后进行排序?

您希望维护两个主数组还是将它们合并为一个?下面是一个结合如下内容的解决方案:

<?php

// merge branches of array
$array = array_merge($yourarray[0], $yourarray[1]);
$sorders = array();

foreach($array as $key => $current) {
    foreach($current as $subkey => $value) {
        // create new array with sorder as key, original key as value
        $sorders[$value['sorder']] = $subkey;   
    }
}

// sort by key (sorder)
ksort($sorders);

// create new array with ordered results
$new_array = array();
foreach($sorders as $sorder => $subkey) {

    // add values back
    $new_array[] = $array[0][$subkey];

}

print_r($new_array);

?>
$yourArray = array(

                array(
                        array('id' => 2208,
                                'status' => 'u13333333333333',
                                'user_id' => 6,
                                'sorder'=>3
                        ),
                        array('id' => 2208,
                                'status' => 'user111111111111111',
                                'user_id' => 6,
                                'sorder'=>1
                        ),
                ),
                array(
                        array('id' => 2209,
                                'status' => 'u222222222222222222222',
                                'user_id' => 5,
                                'sorder'=>2
                        ),

                ),


);
/*Merger arrays as one */
function loopArrayMerger(array $bigArray) {
    if (!$bigArray) {
        return array();
    }

    return call_user_func_array('array_merge', $bigArray);
}
$flatedArray = loopArrayMerger($yourArray);
/*Call back function for sorting, if you want in ascending order just replace 1:-1 with -1:1*/
function compareElementsInArray($a, $b) {
    if ($a['sorder'] == $b['sorder']) {
        return 0;
    }
    return ($a['sorder'] < $b['sorder']) ? 1 : -1;
}

/*Finally sort your array*/
uasort($flatedArray, 'compareElementsInArray');
echo '<pre>';
print_r($flatedArray);


另一个问题是这个数组最初是如何创建的?您可能会发现,无论生成它的是什么(如果它是某种框架的话),在按该字段检索要排序的数据时,都可能会给您一个选项。如果您是通过自己的查询(比如MySQL)获得它,那么最好在SQL查询中按该字段排序,而不是在…之后进行排序?

您希望维护两个主数组还是将它们合并为一个?下面是一个结合如下内容的解决方案:

<?php

// merge branches of array
$array = array_merge($yourarray[0], $yourarray[1]);
$sorders = array();

foreach($array as $key => $current) {
    foreach($current as $subkey => $value) {
        // create new array with sorder as key, original key as value
        $sorders[$value['sorder']] = $subkey;   
    }
}

// sort by key (sorder)
ksort($sorders);

// create new array with ordered results
$new_array = array();
foreach($sorders as $sorder => $subkey) {

    // add values back
    $new_array[] = $array[0][$subkey];

}

print_r($new_array);

?>
$yourArray = array(

                array(
                        array('id' => 2208,
                                'status' => 'u13333333333333',
                                'user_id' => 6,
                                'sorder'=>3
                        ),
                        array('id' => 2208,
                                'status' => 'user111111111111111',
                                'user_id' => 6,
                                'sorder'=>1
                        ),
                ),
                array(
                        array('id' => 2209,
                                'status' => 'u222222222222222222222',
                                'user_id' => 5,
                                'sorder'=>2
                        ),

                ),


);
/*Merger arrays as one */
function loopArrayMerger(array $bigArray) {
    if (!$bigArray) {
        return array();
    }

    return call_user_func_array('array_merge', $bigArray);
}
$flatedArray = loopArrayMerger($yourArray);
/*Call back function for sorting, if you want in ascending order just replace 1:-1 with -1:1*/
function compareElementsInArray($a, $b) {
    if ($a['sorder'] == $b['sorder']) {
        return 0;
    }
    return ($a['sorder'] < $b['sorder']) ? 1 : -1;
}

/*Finally sort your array*/
uasort($flatedArray, 'compareElementsInArray');
echo '<pre>';
print_r($flatedArray);


另一个问题是这个数组最初是如何创建的?您可能会发现,无论生成它的是什么(如果它是某种框架的话),在按该字段检索要排序的数据时,都可能会给您一个选项。如果您是通过自己的查询(比如MySQL)获得它,那么最好在SQL查询中按该字段排序,而不是在…之后进行排序?

您希望维护两个主数组还是将它们合并为一个?下面是一个结合如下内容的解决方案:

<?php

// merge branches of array
$array = array_merge($yourarray[0], $yourarray[1]);
$sorders = array();

foreach($array as $key => $current) {
    foreach($current as $subkey => $value) {
        // create new array with sorder as key, original key as value
        $sorders[$value['sorder']] = $subkey;   
    }
}

// sort by key (sorder)
ksort($sorders);

// create new array with ordered results
$new_array = array();
foreach($sorders as $sorder => $subkey) {

    // add values back
    $new_array[] = $array[0][$subkey];

}

print_r($new_array);

?>
$yourArray = array(

                array(
                        array('id' => 2208,
                                'status' => 'u13333333333333',
                                'user_id' => 6,
                                'sorder'=>3
                        ),
                        array('id' => 2208,
                                'status' => 'user111111111111111',
                                'user_id' => 6,
                                'sorder'=>1
                        ),
                ),
                array(
                        array('id' => 2209,
                                'status' => 'u222222222222222222222',
                                'user_id' => 5,
                                'sorder'=>2
                        ),

                ),


);
/*Merger arrays as one */
function loopArrayMerger(array $bigArray) {
    if (!$bigArray) {
        return array();
    }

    return call_user_func_array('array_merge', $bigArray);
}
$flatedArray = loopArrayMerger($yourArray);
/*Call back function for sorting, if you want in ascending order just replace 1:-1 with -1:1*/
function compareElementsInArray($a, $b) {
    if ($a['sorder'] == $b['sorder']) {
        return 0;
    }
    return ($a['sorder'] < $b['sorder']) ? 1 : -1;
}

/*Finally sort your array*/
uasort($flatedArray, 'compareElementsInArray');
echo '<pre>';
print_r($flatedArray);

另一个问题是这个数组最初是如何创建的?您可能会发现,无论生成它的是什么(如果它是某种框架的话),在按该字段检索要排序的数据时,都可能会给您一个选项。如果您是通过自己的查询(比如MySQL)获得它,那么最好在SQL查询中按该字段排序,而不是在…?

$yourArray=array之后进行排序(
$yourArray = array(

                array(
                        array('id' => 2208,
                                'status' => 'u13333333333333',
                                'user_id' => 6,
                                'sorder'=>3
                        ),
                        array('id' => 2208,
                                'status' => 'user111111111111111',
                                'user_id' => 6,
                                'sorder'=>1
                        ),
                ),
                array(
                        array('id' => 2209,
                                'status' => 'u222222222222222222222',
                                'user_id' => 5,
                                'sorder'=>2
                        ),

                ),


);
/*Merger arrays as one */
function loopArrayMerger(array $bigArray) {
    if (!$bigArray) {
        return array();
    }

    return call_user_func_array('array_merge', $bigArray);
}
$flatedArray = loopArrayMerger($yourArray);
/*Call back function for sorting, if you want in ascending order just replace 1:-1 with -1:1*/
function compareElementsInArray($a, $b) {
    if ($a['sorder'] == $b['sorder']) {
        return 0;
    }
    return ($a['sorder'] < $b['sorder']) ? 1 : -1;
}

/*Finally sort your array*/
uasort($flatedArray, 'compareElementsInArray');
echo '<pre>';
print_r($flatedArray);
排列( 数组('id'=>2208, “状态”=>“U1333333”, “用户id”=>6, 'sorder'=>3 ), 数组('id'=>2208, '状态'=>'用户111111', “用户id”=>6, “排序器”=>1 ), ), 排列( 数组('id'=>2209, “状态”=>“U2222222”, “用户id”=>5, 'sorder'=>2 ), ), ); /*合并阵列为一体*/ 函数loopArrayMerger(数组$bigArray){ if(!$bigArray){ 返回数组(); } 返回调用用户函数数组('array\u merge',$bigArray); } $FlateArray=loopArrayMerger($yourArray); /*用于排序的回调函数,如果希望按升序排列,只需将1:-1替换为-1:1即可*/ 函数compareElementsInArray($a,$b){ 如果($a['sorder']=$b['sorder'])){ 返回0; } 回报($a['sorder']<$b['sorder'])?1:-1; } /*最后对数组进行排序*/ uasort($flateArray,'compareElementsInArray'); 回声'; 打印(平面阵列);
$yourray=array(
排列(
数组('id'=>2208,
“状态”=>“U1333333”,
“用户id”=>6,
'sorder'=>3
),
数组('id'=>2208,
'状态'=>'用户111111',
“用户id”=>6,
“排序器”=>1
),
),
排列(
数组('id'=>2209,
“状态”=>“U2222222”,
“用户id”=>5,
'sorder'=>2
),
),
);
/*合并阵列为一体*/
函数loopArrayMerger(数组$bigArray){
if(!$bigArray){
返回数组();
}
返回调用用户函数数组('array\u merge',$bigArray);
}
$FlateArray=loopArrayMerger($yourArray);
/*用于排序的回调函数,如果希望按升序排列,只需将1:-1替换为-1:1即可*/
函数compareElementsInArray($a,$b){
如果($a['sorder']=$b['sorder'])){
返回0;
}
回报($a['sorder']<$b['sorder'])?1:-1;
}
/*最后对数组进行排序*/
uasort($flateArray,'compareElementsInArray');
回声';
打印(平面阵列);
$yourray=array(
排列(
数组('id'=>2208,
“状态”=>“U1333333”,
“用户id”=>6,
'sorder'=>3
),
数组('id'=>2208,
'状态'=>'用户111111',
“用户id”=>6,
“排序器”=>1
),
),
排列(
数组('id'=>2209,
“状态”=>“U2222222”,
“用户id”=>5,
“该死