2014-09-22 3 views
0

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

код

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

'fetch_array' заполняет как числовые, так и строковые ключи, вы ищете' fetch_assoc'. – georg

+0

@georg Если я изменил его на 'while ($ row = mysqli_fetch_assoc ($ r)), результат будет таким же. – falcon

+0

'почему этот код печатает двойные результаты с помощью числовых клавиш тоже, это по умолчанию, иначе вам нужно передать дополнительные флаги в' fetch_array' за то, что вы действительно хотите. –

ответ

2

Проблема: вы используете 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 
+0

Спасибо за предложение. – falcon

1

Вместо использования mysqli_fetch_array Вы должны использовать mysqli_fetch_assoc

0

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

Смежные вопросы