Вопрос

Я работаю с Drupal в настоящее время, и у них есть эта вещь с рендеринговыми массивами.Они вкладывают ключи фунта перед индексами конфигурации их рендеринга, которые затем используются функциями рендеринга.

Но!Проблема не имеет ничего общего с 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

Обновление ------ >>

Я использую PHP 5.3.27, завернутый MAPP. И попробовал здесь: http://writeCodeonline.com/php/ Те же результаты обоих.

Это было полезно?

Решение

Ваш код дает мне вывод, который вы хотите.Я подозреваю, что есть что-то В окружающей среде, которая меняется.Или вы допустили ошибку в Копирование этого или что-то в этом роде.

-Edit -

Заключение комментариев ниже: ISSET BUGGY в 5.3 и предыдущий.Фиксированный в 5.4.От php.net:

Нечисленные строки смещения - например$ a ['foo'] Где $ a - строка - теперь верните ложь на ISSET () и TRUE на пустые () и создают e_warning, если вы попытаетесь их использовать.Смещения Типы Double, Bool и NULL производят e_notice.Числовые строки (например, $ A ['2']) еще работать как раньше.Обратите внимание, что смещения, такие как «12 .3 »и« 5 FOOBAR », считаются нечисленными и производить e_warning, но преобразуются в 12 и 5 соответственно для назад соображения совместимости.Примечание. Следующий код возвращает другой результат.$ str= 'abc'; var_dump (Isset ($ str ['x']));// false для php 5.4 или более поздней версии, но true для 5,3 или менее

Другие советы

Нет ничего плохого, ваше ожидание просто не согласен с тем, как работает PHP.

Если вы хотите, чтобы значения «Название» и «типа» будут рассматриваться как пары, которые вам нужно как-то группировать их вместе (не только «поставить их рядом друг с другом»).Один из способов сделать это, чтобы обернуть другой массив вокруг каждой пары, что приведет к вашему ожидаемому выводу.Вы уже делаете это для пары в Facebook / pair, поэтому удаление остальных данных дает вывод, который вы ожидаете:

$array = array(
  array(
    '#title' => 'Facebook',
    '#type' => 'input',
  )
);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top