我寫的代碼基於this similar question,但是我無法將其轉換爲在類中工作,並且沒有使用全局變量。根據單獨陣列的順序對陣列進行排序
這是我想要做的。
假設我有2個數組:
$headings = array(
'id' => 'ID',
'name' => 'Name',
);
$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'name' => 'John Smith',
'id' => 2,
'other' => 'Potentially other data'
),
);
我想$rows
分類到在$headings
與出現在末端任何未定義的鍵指定的順序。例如,排序$rows
後會是什麼樣子:
$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'id' => 2,
'name' => 'John Smith',
'other' => 'Potentially other data'
),
);
其中工程類之外的代碼是:
$headings = array(
'id' => 'ID',
'name' => 'Name',
);
$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'name' => 'John Smith',
'id' => 2,
'other' => 'Potentially other data'
),
);
var_dump($rows);
array_walk($rows, "sort_it");
var_dump($rows);
function sort_it(&$value, $key) {
uksort($value, "cmp");
}
function cmp($a, $b) {
global $headings;
if (!isset($headings[$a]) || !isset($headings[$b]) || $headings[$a]>$headings[$b]){
return 1;
}else{
return -1;
}
}
和輸出:
array
0 =>
array
'id' => int 1
'name' => string 'Jo Blogs' (length=8)
1 =>
array
'name' => string 'John Smith' (length=10)
'id' => int 2
'other' => string 'Potentially other data' (length=22)
array
0 =>
array
'id' => int 1
'name' => string 'Jo Blogs' (length=8)
1 =>
array
'id' => int 2
'name' => string 'John Smith' (length=10)
'other' => string 'Potentially other data' (length=22)
哪是正確的。再次,我如何擺脫對全球的使用。我知道array_walk($rows, array($this, "sort_it"));
將使用$this->sort_it()
。不幸的是,這必須在PHP 5.2.14中工作(因此從5.3開始沒有花哨的幻想)。
謝謝。
您是否需要與5.3以前的PHP版本兼容? – BoltClock 2011-02-25 11:36:29
@BoltClock - 不幸的是。 5.2.14。我也將這個補充到這個問題上,謝謝。 – 2011-02-25 11:42:07