Можете ли вы заставить PHP просматривать числовой ключ как ассоциативный ключ массива?

#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 😉