[英]Sorting multidimensional number array in PHP
我在排序多維數組時遇到問題。
數組看起來像:
$array = array( array("token" => array(100, 240, 348, 23, 17), array("token" => array(293, 28, 283, 2, 28), array("token" => array(842, 23, 72, 98, 114) );
現在我想按“列”對它們進行排序。 這意味着,必須對第一列數字(100、293、842)進行排序,然后是第二列(但保持第一列不變。可能會發生列具有相同數字且多行)等等.
實際上我嘗試用 usort() 來做這個,但這僅在對第一列進行排序時才有效:
function do_sort($a, $b) {
$tok_a = $a["token"];
$tok_b = $b["token"];
if ($tok_a[0] <= $tok_b[0])
return false;
else
return true;
}
usort($array, "do_sort");
我怎樣才能做到這一點? 謝謝
這是可能的解決方案:
代碼:
function array_transpose(array $array) {
$result = array();
foreach ( $array as $rowNum => $row ) {
foreach ( $row as $colNum => $value ) {
$result[$colNum][$rowNum] = $value;
}
}
return $result;
}
$array = array(
array("token" => array(100, 240, 348, 23, 17)),
array("token" => array(293, 28, 283, 2, 28)),
array("token" => array(842, 23, 72, 98, 114)),
);
// get rid of 'token'
foreach ( $array as &$item ) {
$item = $item['token'];
}
unset($item);
// swap columns and rows
$array = array_transpose($array);
// sort columns
foreach ( $array as &$item ) {
sort($item);
}
unset($item);
// swap back columns and rows
$array = array_transpose($array);
// put 'token' back
foreach ( $array as &$item ) {
$item = array('token' => $item);
}
unset($item);
// display results
foreach ( $array as $row ) {
foreach ( $row['token'] as $value ) {
printf('%-7d', $value);
}
echo "\n";
}
Output:
100 23 72 2 17
293 28 283 23 28
842 240 348 98 114
我認為這會做你所追求的。 我這里做了一些假設(比如$array
真的是一個數組,至少有一個子數組,所有子數組都以token
為key,所有子數組元素個數相同)。
<?php
$array = array(
array("token" => array(100, 240, 348, 23, 17)),
array("token" => array(293, 28, 283, 2, 28)),
array("token" => array(842, 23, 72, 98, 114)),
);
$count_outer = count($array);
$count_inner = count($array[0]['token']);
for ($i=0; $i < $count_inner; $i++) {
$temp_arr = array();
for ($j=0; $j < $count_outer; $j++) {
$temp_arr[] = $array[$j]['token'][$i];
}
sort($temp_arr);
for ($j=0; $j < $count_outer; $j++) {
$array[$j]['token'][$i] = $temp_arr[$j];
}
}
foreach ($array as $value) {
var_dump($value);
echo '<br>';
}
Output:
數組(1){ [“令牌”]=> 數組(5){ [0]=> int(100) [1]=> int(23) [2]=> int(72) [3]=> int (2) [4]=> int(17) } } array(1) { ["token"]=> array(5) { [0]=> int(293) [1]=> int(28) [ 2]=> int(283) [3]=> int(23) [4]=> int(28) } } array(1) { ["token"]=> array(5) { [0]=> int(842) [1]=> int(240) [2]=> int(348) [3]=> int(98) [4]=> int(114) } }
你不能只是
foreach ($array as &$item) {
sort($item['token']);
}
還是我誤解了這個問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.