толчок массива — PHP array_push () тоже возвращает числовые ключи вместо только строковых ключей

Я пытаюсь получить данные из MySQL. Поскольку я все еще изучаю PHP и MySQLi, я не совсем понимаю, почему этот код выводит двойные результаты также с помощью цифровых клавиш. Мне нужно нажать только строковые ключи со значениями. Спасибо за направление.

код

if ( $r = $mysqli -> query ( $q ) ) {
${ 'err_css_' . $err_asid } = array ();
while ( $row = mysqli_fetch_array ( $r ) ) {
array_push ( ${ 'err_css_' . $err_asid }, ${ 'err_css_' . $err_asid }[$row['language_asid']]=$row['value'] );

}
print_r ( ${'err_css_' . $err_asid } );
}

результат:

Array (
[ces] => background:czech_flag_url;
[0] => background:czech_flag_url; // i dont want numeric key
[eng] => background:english_flag_url;
[1] => background:english_flag_url; // i dont want numeric key
)

0

Решение

Проблема в том, что вы используете array_push неправильно. На самом деле, вам это вообще не нужно:

if ( $r = $mysqli->query ( $q ) ) {
$css = array ();
while ( $row = mysqli_fetch_array ( $r ) ) {
$css[$row['language_asid']] = $row['value'] );
}
}

Кроме того, я бы посоветовал вам не использовать «переменные переменные». Это по сути бесполезная функция, которая лишь ухудшает читабельность вашего кода. Используйте массивы или объекты:

${ 'err_css_' . $err_asid } = array (); // NO

$err_css[$err_asid] = array ();         // yes
2

Другие решения

Вместо того, чтобы использовать mysqli_fetch_array
Вам нужно использовать mysqli_fetch_assoc

1

Причина в том, что он показывает двойные результаты, потому что есть двойные результаты! mysqli_fetch_array () создает ассоциативные и числовые массивы с одинаковыми значениями. Попробуйте использовать mysqli_fetch_assoc () или is_numeric ($ key) для дальнейшей фильтрации результатов.

0