php数组中的井键/哈希键/主题标签

时间:2014-04-11 09:43:50

标签: php arrays hashtag

我目前正在使用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/ 同样的结果。

2 个答案:

答案 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',
  )
);