PHP多维数组 - 第二维覆盖第一个值

时间:2011-12-19 05:09:58

标签: php multidimensional-array

我的代码符合我的预期:

$somearr['some']='value';

$arr[]="first";
$arr['first'][]=$somearr['some'];

echo "<br> Var dump of arr: " . var_dump($arr);

收率:

array (size=2)
  0 => string 'first' (length=5)
  'first' => 
    array (size=1)
      0 => string 'value' (length=5)

完美..

现在尝试在此中应用相同的原则(我假设):

function get_field_names($database, $table){



$show_statement = "DESCRIBE `" . $database . "`.`" . $table . "`";

$column_result = mysql_query($show_statement);






        if (mysql_num_rows($column_result) > 0) {



            $f = 0;
            while ($row = mysql_fetch_assoc($column_result, MYSQL_ASSOC)) {



                $field_names[$f] = $row['Field'];

                if ($row['Key'] != ""){



                $field_names[$f][0] = $row['Key'];

                }

                $f++;


            }       

            }



    return $field_names;

}

但是不是使用$ row ['Key']的值为我的数组$ field_names [$ f] [0]创建第二个维度,而是覆盖$ field_names [$ f]字符串中的第一个字符使用$ row ['Key']中的第一个字符使$ field_names [$ f]包含字符串:“field_name”和$ field_names [$ f] [0] = $ row ['Key']其中$ row [ 'Key'] ==“PRI”,我得到:“Pield_name”。

我确信我误解了数组$ row,但我开始进入圈内。在你指出我的问题之后,请诅咒我的愚蠢。 TIA。

2 个答案:

答案 0 :(得分:2)

通过重新审视原始示例很容易解释:

$arr[]="first";
$arr['first'][]=$somearr['some'];

这不符合你的想法。第一行不会创建新的数组键first。它只是为索引条目[0]指定一个值 但是,第二行为字母数字键[first]指定了值。这是$arr数组中的两个不同的子条目。

在第二个示例中,您将覆盖值:

$field_names[$f] = 'string...';

$field_names[$f][0] = 'something else...';

[$f]键只能有一个数组条目。你不能拥有一个包含字符串和数组的共享点。

这里实际发生的是第二行是为'string...'的第一个类似数组的索引赋值。它等同于替代字符串索引语法:

$field_names[$f]{0} = 'something else...';
                 ^
                 |
                 Not an array index. Because a string was here first.

无论如何,您不能以字符串和键共享条目。这就是整个故事。 - 我认为它在array s。

下的手册中的某处被解释了

答案 1 :(得分:1)

这是因为您可以将PHP中的任何字符串视为数组

$test = "Hello, World";
echo $test[0];

会导致“H”被回应。您在

中告诉您代码的内容
$field_names[$f][0] = $row['Key'];

用$ row ['Key']替换字符串$ field_names [$ f]中的第一个字符。但是因为我们正在替换PHP只有1个字符,所以只使用$ row ['Key']中的第一个字符,因此得到“Pield_name”,PRI中的“P”替换为第一个“F”在“字符串数组”中的位置

但是我仍然对你想做的事情感到困惑。如果在插入(?)$ row ['Key']后可以绘制出你想要的数组的样子。我可以帮你解决代码

编辑: 您的热门代码工作的原因是您只是没有为添加到阵列的第一个项目指定密钥:

$arr[]="first"; //Inserts string "first" at pos 0 of array same as $arr[0]="first";
$arr['first'][]=$somearr['some']; //Inserts array into $arr using key 'first'

echo "<br> Var dump of arr: " . var_dump($arr);

使用此代码

可以实现同样的目的
$arr =array(
    0       => 'first',
    'first' => $somearr['some'] 
)