#php #arrays #sorting
#php #массивы #сортировка
Вопрос:
У меня есть массив, подобный этому
Array
(
[0] => Array
(
[0] => Array
(
[szam] => 8
[index] => 0
)
)
[1] => Array
(
[0] => Array
(
[szam] => 1
[index] => 0
)
[1] => Array
(
[szam] => 7
[index] => 1
)
)
Я думал, что мой последний cmp будет работать нормально
function maxSzerintCsokkeno($item1,$item2)
{
if ($item1['szam'] == $item2['szam']) return 0;
return ($item1['szam'] < $item2['szam']) ? 1 : -1;
}
с помощью foreach
foreach ($tomb as $kulcs => $adat) usort($adat,"maxSzerintCsokkeno");
но это ничего не дает, посоветуйте?
Ответ №1:
foreach ($tomb as $kulcs => $adat) usort($adat,"maxSzerintCsokkeno");
Это сортирует только массив подмассивов $adat. И это существует только временно, пока foreach не выполнит цикл над следующим. Ленивым вариантом здесь было бы использовать ссылку:
foreach ($tomb as amp; $adat) usort($adat,"maxSzerintCsokkeno");
Обратите внимание на amp;
. Таким образом, изменение в $adat будет применено непосредственно к родительскому массиву.
Ответ №2:
Вы сортируете временную переменную, что означает, что изменения не применяются. У вас должно сработать следующее:
for($i = 0, $length = count($tomb); $i < $length; $i )
{
usort($tomb[$i], "maxSzerintCsokkeno");
}
Ответ №3:
При повторении цикла foreach переменные ключа и значения ( $kulcs
и $adat
в вашем коде) являются копиями фактических значений в массиве. Как сказал Тим Купер, вы фактически сортируете копию исходного значения.
Вы также можете передать значение по ссылке в вашем цикле foreach. Это означает, что вы будете изменять исходное значение:
foreach ($tomb as $kulcs => amp;$adat) usort($adat,"maxSzerintCsokkeno");