Ключ фунта / хеш ключ / хэштег в PHP массивы
Вопрос
Я работаю с 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',
)
);
.