codeigniter 数组_多重排序():数组大小不一致[重复]

ki0zmccv  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(146)

此问题在此处已有答案

How do I sort a multidimensional array by one of the fields of the inner array in PHP? [duplicate](8个答案)
上个月关门了。
我正在尝试使用array_multisort()函数在其子数组的基础上对数组进行排序......
一边努力;

print_r($mar); echo '<br>';
$arr2 = array_multisort($mar, array('wek'=>SORT_ASC));
print_r($arr2);

获取错误array_multisort(): Array sizes are inconsistent
排序前的输出为

Array ( 
    [0] => Array ( [dat] => 1 [wek] => 5 [mac] => A100 [mcr] => #00c8ff ) 
    [1] => Array ( [dat] => 2 [wek] => 9 [mac] => A100 [mcr] => #00c8ff ) 
    [2] => Array ( [dat] => 5 [wek] => 13 [mac] => A100 [mcr] => #00c8ff ) 
    [3] => Array ( [dat] => 5 [wek] => 6 [mac] => A101 [mcr] => #ff8800 ) 
    [4] => Array ( [dat] => 13 [wek] => 17 [mac] => A100 [mcr] => #00c8ff ) 
    [5] => Array ( [dat] => 20 [wek] => 21 [mac] => A100 [mcr] => #00c8ff ) 
    [6] => Array ( [dat] => 8 [wek] => 14 [mac] => A101 [mcr] => #ff8800 ) 
)

我需要的是:

Array ( 
    [0] => Array ( [dat] => 1 [wek] => 5 [mac] => A100 [mcr] => #00c8ff ) 
    [3] => Array ( [dat] => 5 [wek] => 6 [mac] => A101 [mcr] => #ff8800 ) 
    [1] => Array ( [dat] => 2 [wek] => 9 [mac] => A100 [mcr] => #00c8ff ) 
    [2] => Array ( [dat] => 5 [wek] => 13 [mac] => A100 [mcr] => #00c8ff ) 
    [6] => Array ( [dat] => 8 [wek] => 14 [mac] => A101 [mcr] => #ff8800 ) 
    [4] => Array ( [dat] => 13 [wek] => 17 [mac] => A100 [mcr] => #00c8ff ) 
    [5] => Array ( [dat] => 20 [wek] => 21 [mac] => A100 [mcr] => #00c8ff ) 
)
v7pvogib

v7pvogib1#

以下行中存在错误:

$arr2 = array_multisort($mar, array('wek'=>SORT_ASC));

您尝试将返回结果存储到数组中,但array_multisort返回的是布尔值而不是排序后的数组:
为排序多维数组**$mar**执行以下操作:

foreach ($mar as $key => $row)
{
    $wek[$key]  = $row['wek'];
}    

// Sort the data with wek ascending order, add $mar as the last parameter, to sort by the common key

array_multisort($wek, SORT_ASC, $mar);

$mar数组现在已在上述操作后排序。

uqzxnwby

uqzxnwby2#

为了能够使用array_multisort,你应该重新组织你的数组。请看下面的例子#3:http://uk1.php.net/array_multisort
或者,您可以使用usort,但它会对键重新编号:

<?php
$mar =Array (.
    0 => Array ( 'dat' => 1, 'wek' => 5, 'mac' => 'A100', 'mcr' => '#00c8ff' ) ,
    1 => Array ( 'dat' => 2, 'wek' => 9, 'mac' => 'A100', 'mcr' => '#00c8ff' ) ,
    2 => Array ( 'dat' => 5, 'wek' => 13, 'mac' => 'A100', 'mcr' => '#00c8ff' ) ,
    3 => Array ( 'dat' => 5, 'wek' => 6, 'mac' => 'A101', 'mcr' => '#ff8800' ) ,
    4 => Array ( 'dat' => 13, 'wek' => 17, 'mac' => 'A100', 'mcr' => '#00c8ff' ),
    5 => Array ( 'dat' => 20, 'wek' => 21, 'mac' => 'A100', 'mcr' => '#00c8ff' ) ,
    6 => Array ( 'dat' => 8, 'wek' => 14, 'mac' => 'A101', 'mcr' => '#ff8800' ) ,
);

usort($mar, function($a,$b){return $a['wek']-$b['wek'];});
print_r($mar);
bmvo0sr5

bmvo0sr53#

避免函数误用,应如下所示:

$keys = array_column($mar, 'wek');
array_multisort($keys, SORT_ASC, $mar);

有时,例外的原因
数组_多重排序():数组大小不一致
数组(行)没有我们排序的关键字。这是很容易的,因为我们有很多元素关联数组,有时由第三方提供。
解决办法是在使用前检查数据:

array_walk($mar, function (&$row) {
    $row['wek'] = $row['wek'] ?? [];
});

完整样品:

<?php

$mar = [
    [ 'dat' => 1],
    [ 'dat' => 2,  'wek'=> 9 ],
    [ 'dat' => 5 , 'wek'=> 6 ],
    [ 'dat' => 20, 'wek'=> 21 ],
    [ 'dat' => 8,  'wek'=> 14 ],
];    

print_r($mar); echo '<br>';

array_walk($mar, function (&$row) {
    $row['wek'] = $row['wek'] ?? null;
}); 
$keys = array_column($mar, 'wek');
array_multisort($keys, SORT_ASC, $mar);

print_r($mar);

相关问题