Сплит и эхо в список - PullRequest
       11

Сплит и эхо в список

2 голосов
/ 22 августа 2010

у меня есть таблица sql, полная адреса ', как это

Hattie:07903 000066::Dad:07854 000095::Tom:07903 000044::Allistair:07765 000005::Home:0115 974 0000::

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

<ol>
<li>Hattie:07903 000066</li>
<li>Dad:07854 000095</li>
</ol> 

Любая помощь была бы блестящей.

Спасибо

SEO Leicester

Ответы [ 3 ]

4 голосов
/ 22 августа 2010

В Perl нет пота:

#! /usr/bin/perl

local $_ = "Hattie:07903 000066::Dad:07854 000095::Tom:07903 000044::Allistair:07765 000005::Home:0115 974 0000::";

print "<ol>\n",
      map("<li>$_</li>\n", split /::/),
      "</ol>\n";

Как используется в вашем вопросе, последовательность :: является терминатором , а не разделителем, что составляет split немного концептуального несоответствия.Чтобы более точно подогнать формат, используйте совпадение регулярного выражения в контексте списка с /g

Модификатор /g задает глобальное сопоставление с образцом, то есть сопоставление как можно больше раз в пределахстрока.Как это ведет себя, зависит от контекста.В контексте списка он возвращает список подстрок, совпадающих с любыми захватывающими скобками в регулярном выражении.

и некожадный квантификатор

По умолчанию количественноsubpattern является «жадным», то есть он будет совпадать столько раз, сколько это возможно (учитывая конкретное начальное местоположение), и в то же время разрешать совпадение с остальной частью шаблона.Если вы хотите, чтобы он совпадал с минимально возможным числом раз, следуйте квантификатору с ?.Обратите внимание, что значения не меняются, только «жадность»…

Это составляет

print "<ol>\n",
      map("<li>$_</li>\n", /(.+?)::/g),
      "</ol>\n";

В любом случае, вывод составляет

<ol>
<li>Hattie:07903 000066</li>
<li>Dad:07854 000095</li>
<li>Tom:07903 000044</li>
<li>Allistair:07765 000005</li>
<li>Home:0115 974 0000</li>
</ol>
3 голосов
/ 22 августа 2010

Вы можете разделить вашу строку следующим образом:

$adresses = explode("::", $yourString)

И тогда простой foreach напечатает содержимое по вашему желанию.

2 голосов
/ 22 августа 2010

Было бы лучше реструктурировать вашу базу данных так, чтобы адреса не сохранялись в виде строки с разделителями, а с каждым адресом в виде строки в таблице адресов ... предпочтительно с именем и адресом в виде отдельных столбцов ... это намного сложнее для поиска и манипулирования данными (добавление нового адреса и т. д.)

$addresses = explode('::',$addressField);
echo '<ol>';
foreach($addresses as $address) {
   echo '<li>',$address,'</li>';
}
echo '</ol>';

EDIT

(бесстыдно крадет форматирование из ответа Prix)

$addresses = explode('::',$addressField);
echo '<ol>';
foreach($addresses as $address) {
   list($name,$phone) = explode(':',$address);
   echo '<li>Name: ',$name,' Telephone: ',$phone,'</li>';
}
echo '</ol>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...