2013-04-04 4 views
-1
<?php 
foreach ($jsonObj as $items) { 
foreach ($items["items"] as $itemlist){ 
// $itemlist['position']; I want them to echo in that order 
echo $itemlist['name']; 
} 
} 
?> 

У меня есть массив, который я прокручиваю. В этом массиве есть имя и порядок. Я хотел бы отобразить их в числовом порядке, как я могу заставить его распечатать список элементов с самым низким номером первым, затем вторым и т. Д.?Сортировка php-массива внутри цикла по числу

+0

попробовать это раньше второй foreach loop sort ($ items ["items"]); –

+0

Я понимаю, что мне нужно использовать какой-то вид. asort для примера. Я не понимаю, что у меня нет массива для сортировки, прежде чем я его уже распечатаю. –

+0

Я не совсем уверен, что я следую. Если у вас нет массива, как вы его печатаете в первую очередь? –

ответ

1

Вы можете использовать usort с cmp_function. Попробуйте эту функцию:

function compare_position($a, $b) { 
    return $a['position'] - $b['position']; 
} 

Затем, когда вы перебор массива:

foreach ($jsonObj as $items) { 
    usort($items['items'], "compare_position"); 
    foreach ($items["items"] as $itemlist){ 
     echo $itemlist['position']; 
     echo $itemlist['name']; 
    } 
} 

Подробнее о usort можно найти здесь http://php.net/manual/en/function.usort.php

Надеется, что это помогает :)

+0

Спасибо, ты хороший человек. Я понимаю это сейчас. Некоторые злые люди писали плохие комментарии обо мне (удалены сейчас) ... вы мне это очень поняли. Не только код, но я понимаю, чего я раньше не понимал. –

+0

@BadrHari вы должны посмотреть на мой ответ - он обеспечивает более гибкое решение, а также делает более понятным для других программистов то, что происходит. – deed02392

1

Вам нужно для подготовки массива позиций для сортировки сначала. Сортировка сортирует по ссылке, позволяя вам прокручивать ее второй раз, но на этот раз отсортировано по array_multisort().

<?php 
foreach($jsonObj as $items) { 
    foreach($items['items'] as $key => $itemlist) { 
     $positions[$key] = $itemlist['position']; 
     $names[$key] = $itemlist['name']; 
    } 
    array_multisort($positions, SORT_ASC, $items['items']); 
    foreach($items['items'] as $itemlist) { 
     echo $itemlist['name'], "<br />"; 
     // Now in asc order of positions 
    } 
} 

Преимущество этого в том, что при наличии других атрибутов, которые вы хотите отсортировать, вы можете это сделать. Например, если есть «позиция» шанс будет то же самое для двух человек, можно затем сортировать в алфавитном порядке по имени и т.д ..

Полное решение по Codepad, два ответа по сравнению: http://codepad.viper-7.com/5yJ72S

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