Может ли кто-нибудь указать мне правильное направление, почему я не могу заставить arsort () работать над следующим:
$d=array();
$d['y'][0]['year'] = 2000;
$d['y'][1]['year'] = 2001;
$d['y'][2]['year'] = 2002;
$d['y'][3]['year'] = 2003;
$d['y'][4]['year'] = 2004;
$d['y'][5]['year'] = 2005;
arsort($d['y']);
$i=0
foreach ($d['y'] as $value){
$i++;
echo $d['y'][$i]['year'];
}
Это просто эхо в порядке 0,1,2,3,4 и т. Д. Я не могу найти то, что мне здесь не хватает?
Спасибо
Ваш код правильный, но вы делаете ошибку при печати.
Ссылаясь на значение, индексированное как $ d [‘y’] [‘5’] [‘year’], результатом всегда будет 2005. Соответственно, foreach отображает годы в порядке возрастания. Попробуйте вместо этого:
foreach($d['y'] as $value) {
echo $value['year'];
}
и вы увидите, что ваш массив в обратном порядке.
(Не используйте переменную $ i в цикле foreach)
Риккардо указал мне правильное направление, я обнаружил, что мне нужно использовать:
echo $value['year'];
и не
echo $d['y'][$i]['year'];
Поскольку счетчик $ i вызывал индексный номер напрямую, а не использовал отсортированный массив при зацикливании.
Так как arsort () поддерживает ассоциации ключей, переупорядоченный многомерный массив будет иметь нулевой элемент последним, а элемент 5 — первым. Использование цикла foreach может привести к тому, что в коде не будет отображаться отсортированный массив, если переменная $ i изначально установлена в ноль. Чтобы избежать такой непреднамеренной ошибки, а также повысить производительность и упростить код, можно заменить цикл foreach следующим образом:
<?php
function showData($value,$key){
echo "$value\n";
}
array_walk_recursive( $d, 'showData');
array_walk_recursive (), как следует из его названия, рекурсивно обходит массив, чтобы найти данные. Обратный вызов позволяет легко получить доступ и отобразить значения.
Увидеть демонстрация
Это потому что arsort () сохранит ключ. Вы можете проверить руководство Вот.
Таким образом, после arsort () $ d аналогично приведенному ниже, но вы печатаете в обратном порядке, что делает его не отсортированным. Проверить живое демо.
Array
(
[y] => Array
(
[5] => Array
(
[year] => 2005
)
[4] => Array
(
[year] => 2004
)
[3] => Array
(
[year] => 2003
)
[2] => Array
(
[year] => 2002
)
[1] => Array
(
[year] => 2001
)
[0] => Array
(
[year] => 2000
)
)
)