Код, который я написал, основан на этом похожем вопросе , однако у меня возникают проблемы с преобразованием его в работу внутри класса и без использования глобальных символов .
Вот что я хочу сделать.
Предположим, у меня есть 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).
Спасибо.