#php #arrays
#php #массивы
Вопрос:
Возникла странная проблема с ассоциативным массивом. Этот код:
$sql = DB::select('id','process_id')->from('field')->order_by('process_id')->order_by('sort_order');
$query = $sql->execute();
foreach($query->as_array() as $row){
$results[$row['id']] = $this->get_field($row['id']);
}
создает массив с числовым ключом. В моей среде разработки массив обрабатывается как ассоциативный массив и упорядочивается точно так, как он построен из запроса. Однако в рабочей среде он обрабатывает ключ как число и сортирует по идентификатору. Если я заставлю PHP считать ключ ассоциативным с помощью:
$results["a".$row['id']] = $this->get_field($row['id']);
он использует сортировку MySQL. К сожалению, существует много кода, который зависит от того, что ключ является просто идентификатором.
У кого-нибудь есть какие-либо мысли о том, почему может быть разница между серверами? Есть идеи по обходному пути?
Комментарии:
1. Попробуйте $results[«».$row[‘id’]] . Я не уверен, как PHP будет обрабатывать это значение, это зависит от того, где происходит интерпретация.
2. Это очень странно… PHP не сортирует ключи автоматически, он сохраняет их в порядке вставки. Вы уверены, что результат запроса одинаковый оба раза? На самом деле нет разницы между числовыми и ассоциативными массивами в PHP. Это та же структура данных.
3. Проблема в другом… нет в опубликованном коде.
4. Предпосылка этого вопроса (сортировка) ложна. Голосование за закрытие не является реальным вопросом.
5. Я попробовал $results[«».$row[‘id’]] … он по-прежнему интерпретируется как числовой.
Ответ №1:
Может быть, попробовать преобразовать его в строку?
$results[(string)$row['id']] = $this->get_field($row['id']);
Или, если все, что вас волнует, это порядок, просто поместите их в обычный список:
$results[] = $this->get_field($row['id']);
Комментарии:
1. это не должно изменять порядок
2. @Brendan: Вы не можете использовать (строковые) числа в качестве ключей, они всегда будут числом в PHP 😉