У меня есть массив с идентификаторами как ключ и имя из связанной с ним базы данных. Я использую это для получения статистики из PHP для вывода на диаграмму Google, сгенерированную на JavaScript (через JSON). В PHP у меня есть следующий массив:сортировать объект по целочисленному ключу в PHP
$a = [
'33' => 'first',
'25' => 'second',
'14' => 'last
];
Если я запускаю следующий код:
foreach($a as $key => $val)
echo "$key => $val" . PHP_EOL;
я получаю следующее (ожидаемый) результат
33 => first
25 => second
14 => last
Я использую AJAX и JSON для отправьте это в среду JavaScript, здесь он станет объектом. Теперь, когда я запускаю следующий JavaScript:
for(var i in a)
console.log(i + " => " + a[i]);
я
14 => last
25 => second
33 => first
так что мои ключи интерпретируются как целые числа и сортируют в JavaScript, который в данном случае означает, что массив со статистикой я отправлял в Google Диаграмма совпадает с неправильными метками.
Я решил это путем сортировки массива в PHP до того, как я прочитал статистику из базы данных. Мне нужно было ключи остаются теми же, хотя, это то, что я сделал в PHP:
$tmp = array_flip($a);
asort($tmp);
$a = array_flip($tmp);
это дает мне массив в PHP, как это:
[
'14' => 'last',
'25' => 'second',
'33' => 'first'
]
так что теперь в PHP foreach
будет тот же порядок, что и for(i in ...)
в JavaScript. Мне было интересно, есть ли более удобный способ сортировки моего массива в PHP вместо того, чтобы перевернуть его дважды - или - если есть опция для цикла в JavaScript, который не упорядочивает (допустимо запутывающие) целые значения ключей моего массива?
во всяком случае, не вы предпочитаете делать что-то, чтобы массив не сортировался на стороне JS, и вы можете пропустить его так, как предполагалось? –
Да, поэтому я разместил здесь весь этот случай. Я был немного озадачен тем, что PHP foreach так сильно отличался от JavaScripts for (var i in ... – patrick
Некоторые браузеры реализуют объекты/массивы с сортировкой ключей, и вы ничего не можете сделать, чтобы изменить это. Однако вы можете использовать массив (с парами внутри), а не объект. –