PHP удаление элемента с периодом из массива - PullRequest
1 голос
/ 22 февраля 2010

У меня есть массив продуктов виджетов.

Некоторые виджеты имеют зарезервированный символ периода в своих именах.

Проблема возникает, когда php встречает точку, остальная часть имени виджета игнорируется. Как я мог прочитать виджет в виде строкового литерала, чтобы символ точки не мешал?

unset($products[$widget]);

Я мог бы заменить точку буквой-заполнителем, чтобы она не была зарезервированным символом, но я бы предпочел этого не делать.

Спасибо

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

используют нормализованное значение их имени в качестве ключа и реальное имя виджета в качестве значения.

Пример:

function slug($str)
{
    $str = strtolower(trim($str));
    $str = preg_replace('/[^a-z0-9-]/', '-', $str);
    $str = preg_replace('/-.+/', "-", $str);
    return $str;
}

$products[slug($widget)] = $widget;
0 голосов
/ 23 февраля 2010

Я сделал некоторые предположения, которые были неверны. Название виджета также содержит символы фунта, которые я не упомянул, потому что я не знал, что символы # влияют на код так же, как они.

Но, как выяснилось, символ фунта вызвал проблему в конце концов, но не при использовании команды unset.

Я передал имя виджета через URL, используя $ _GET [‘’]. Видимо, получающий get не любит символ # и удаляет все после символов фунта #.

Вот краткое объяснение. Так что… допустим, я передавал имя виджета «Crank # x.55». Если я открою переменную $ _GET, вы увидите «Crank», а оставшееся «# x.55» будет удалено.

Когда я посмотрел в URL, он показал "Crank # x.55" (полное имя виджета), что привело меня к мысли, что он был правильно отправлен в переменную $ _GET. Я думал, что символ точки (конкатенации) делал что-то странное, когда я выполнил unset, поэтому я создал оригинальный вопрос. (я знаю, что мне нужно включить больше фактов для будущих вопросов) <- процесс обучения. </p>

Я решил проблему, просто заменив символы фунта на символы @, а затем, после того, как данные были опубликованы, преобразовал символ @ обратно в фунт, используя preg_replace. Подобно ответу Pixeline, я немного адаптировался к моей цели.

Спасибо

...