我目前正在使用Drupal,他们使用渲染数组。它们将井形键放在其渲染数组的配置索引之前,然后由渲染函数使用。
BUT!这个问题与Drupal无关。我在接下来的几行中提供的代码完全独立于任何php应用程序。有些人会说香草PHP。
<?php
$array = array(
'#title' => 'Social media button settings',
'#type' => 'fieldset',
array(
'#title' => 'Facebook',
'#type' => 'input',
)
);
foreach($array as $i => $d) {
// This line could contain ANY!!! key as long as it starts
// with a pound key.
if (isset($d['#title'])) {
var_dump('Index: ' . $i);
echo 'Data:';
var_dump($d);
var_dump('$d["#title"]: ' . $d['#title']);
}
}
输出是:
string 'Index: #title' (length=13)
Data:
string 'Social media button settings' (length=28)
string '$d["#title"]: S' (length=15)
string 'Index: #type' (length=12)
Data:
string 'fieldset' (length=8)
string '$d["#title"]: f' (length=15)
string 'Index: 0' (length=8)
Data:
array (size=2)
'#title' => string 'Facebook' (length=8)
'#type' => string 'input' (length=5)
string '$d["#title"]: Facebook' (length=22)
预期输出为:
string 'Index: 0' (length=8)
Data:
array (size=2)
'#title' => string 'Facebook' (length=8)
'#type' => string 'input' (length=5)
string '$d["#title"]: Facebook' (length=22)
我在这里看不到什么? 这只是PHP中真正令人讨厌的错误吗?
很高兴收到你们的来信。
func0der
更新------&gt;&gt;
我正在使用由MAMP包装的PHP 5.3.27。 并在此处尝试:http://writecodeonline.com/php/ 同样的结果。
答案 0 :(得分:1)
您的代码为我提供了您想要的输出。我怀疑有什么东西 在混乱的环境中。或者你犯了一个错误 复制它或类似的东西。
-edit -
以下评论的结论:isset是5.3及之前的错误。固定 在5.4。来自php.net:
非数字字符串偏移 - 例如$ a ['foo']其中$ a是一个字符串 - 现在返回false 空集()上的isset()和true,如果您尝试使用它们,则生成E_WARNING。抵消 types double,bool和null产生一个E_NOTICE。数字字符串(例如$ a ['2'])仍然是 和以前一样工作。请注意,像'12 .3'和'5 foobar'这样的偏移被视为非数字 并产生一个E_WARNING,但分别转换为12和5,以便向后 兼容性原因。注意:以下代码返回不同的结果。 $海峡= 'ABC'; 的var_dump(isset($ STR [ 'X'])); //对于PHP 5.4或更高版本为false,但对于5.3或更低版本为true
答案 1 :(得分:0)
没有错,你的期望只是不同意PHP的工作方式。
如果您希望将“标题”和“类型”值视为对,则需要以某种方式将它们组合在一起(而不仅仅是“将它们放在一起”)。一种方法是在每对周围包裹另一个数组,这将导致您的预期输出。您已经为Facebook /输入对执行此操作,因此删除其余数据会得到您期望的输出:
$array = array(
array(
'#title' => 'Facebook',
'#type' => 'input',
)
);