Я пытаюсь получить данные из 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
)
Проблема в том, что вы используете 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
Вместо того, чтобы использовать mysqli_fetch_array
Вам нужно использовать mysqli_fetch_assoc
Причина в том, что он показывает двойные результаты, потому что есть двойные результаты! mysqli_fetch_array () создает ассоциативные и числовые массивы с одинаковыми значениями. Попробуйте использовать mysqli_fetch_assoc () или is_numeric ($ key) для дальнейшей фильтрации результатов.