2012-02-18 1 views
0

Возможно, название не имеет особого смысла, но то, что я на самом деле хочу добиться того, чтобы отсортировать массив по его индексу, используя массив с сортировочных значениями:Сортировка массива по значению индекса с учетом порядка

$sortingValues = array(
    'category-1', 
    'category-2', 
    ... 
    'category-9', 
); 
$categories['category-1'][] = $article; 
$categories['category-2'][] = $article; 
... 
$categories['category-9'][] = $article; 

Я хочу добиться того, чтобы отсортировать $ categories со значениями сортировки в $ sortingValues.

ответ

1
$sortingValues = array('category-1', 'category-4', 'category-2', 'category-9'); 
$categories = array('category-1' => 'cat1', 'category-2' =>'cat2', 'category-4' => 'cat4', 'category-9'=>'cat9'); 

// 

foreach($sortingValues as $cat) { 
    if(array_key_exists($cat, $categories)) { 
    print $categories[$cat] . "\n"; 
    } 
} 
0
function cmp_sortingValues($a, $b) { 
    global $sortingValues; 
    if($a == $b) return 0; 
    $apos = array_search($a, $sortingValues); 
    $bpos = array_search($b, $sortingValues); 
    return ($apos>$bpos) ? 1 : -1; 
} 

uksort($categories, "cmp_sortingValues"); 
+0

Мы все знаем, что использование глобалам плохая практика. Почему бы не передать массив сортировки функции? –

+0

Это uksort, который вызывает вашу функцию, и он передает только 2 ключа для сравнения. – piotrm

Смежные вопросы