我有这段代码,如我所料:
$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"在$row['Key'] == "PRI"
的$field_names[$f][0] = $row['Key']
之后,我得到:"Pield_name"
我确信我误解了数组$row
,但是我开始绕圈了。
这很容易通过重新访问原始示例来解释:
$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下的手册中有粗略的解释
这是因为您可以将PHP中的任何字符串视为数组
$test = "Hello, World";
echo $test[0];
将导致"H"被回显。你在
中告诉你的代码$field_names[$f][0] = $row['Key'];
将字符串$field_names[$f]中的第一个字符替换为$row['Key']。然而,由于我们要替换的只有1个字符PHP只使用$row['Key']中的第一个字符因此,您将得到"Pield_name", PRI中的"P"替换为"F"它位于"字符串数组"的第一个位置
我仍然不明白你想做什么。如果您可以在插入$row['Key']后映射出您希望数组的样子。我可以帮你写代码
编辑:top代码工作的原因是你没有为你添加到数组中的第一项指定键:
$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']
)