[英]array_multisort $FILES array
我有一個數組,它是文件上傳輸入的結果。 數組 $FILES 如下所示:
Array (
[files] => Array
(
[name] => Array
(
[0] => 20180131023939.JPG
[1] => 20180131024005.JPG
[2] => 20180131024027.jpg
[3] => 20180131023722.JPG
[4] => 20180131023913.JPG
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
[2] => image/jpeg
[3] => image/jpeg
[4] => image/jpeg
)
[tmp_name] => Array
(
[0] => /data/sites/web/mersbe/tmp/phpzJ6Avh
[1] => /data/sites/web/mersbe/tmp/phpMHduDZ
[2] => /data/sites/web/mersbe/tmp/phpiSohMH
[3] => /data/sites/web/mersbe/tmp/phpOoAJWp
[4] => /data/sites/web/mersbe/tmp/phpdr9n87
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)
[size] => Array
(
[0] => 2461635
[1] => 402525
[2] => 1383589
[3] => 1154849
[4] => 441203
)
)
)
我希望整個數組按名稱排序。 在這個例子中 20180131023722.JPG在排序后應該有 0 的索引。 其他值也應相應排序..
應該使用array_multisort,但我不知道如何..
用這種結構排序 arrays 非常困難。 轉置數組很容易排序。 然后數組具有以下結構:
array (
0 =>
array (
'name' => "20180131023939.JPG",
'type' => "image/jpeg",
'tmp_name' => "/data/sites/web/mersbe/tmp/phpzJ6Avh",
'error' => 0,
'size' => 2461635,
),
1 =>
array (..
排序后,如果需要原始結構,可以再次進行轉置。
function array_transpose(array $array) {
$newArr = [];
foreach($array as $keyRow => $subArr) {
foreach($subArr as $keyCol => $value) $newArr[$keyCol][$keyRow] = $value;
}
return $newArr;
}
//test data
$files = [
'name' => ['20180131023939.JPG','20180131024005.JPG',
'20180131024027.jpg','20180131023722.JPG','20180131023913.JPG'],
'type' => ['image/jpeg', 'image/jpeg', 'image/jpeg', 'image/jpeg', 'image/jpeg'],
'tmp_name' => ['/data/sites/web/mersbe/tmp/phpzJ6Avh',
'/data/sites/web/mersbe/tmp/phpMHduDZ',
'/data/sites/web/mersbe/tmp/phpiSohMH',
'/data/sites/web/mersbe/tmp/phpOoAJWp',
'/data/sites/web/mersbe/tmp/phpdr9n87'],
'error' => [0,0,0,0,0],
'size' => [2461635,402525,1383589,1154849,441203]
];
$arr = array_transpose($files);
//sort by name asc
usort($arr, function($a,$b){return $a['name'] <=> $b['name'];});
//transpose back
$files = array_transpose($arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.