PHP array_push()也返回数字键而不是字符串键

时间:2014-09-22 10:08:42

标签: 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
)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

而不是使用mysqli_fetch_array 您需要使用mysqli_fetch_assoc

答案 2 :(得分:0)

它显示双重结果的原因是因为有双重结果! mysqli_fetch_array()生成具有相同值的关联数组和数值数组。考虑使用mysqli_fetch_assoc()或使用is_numeric($ key)进一步过滤结果。