使用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,
“该死