拆分并回显列表

时间:2010-08-22 10:58:40

标签: php perl list split arraylist

我有一个充满地址的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 个答案:

答案 0 :(得分:4)

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修饰符指定全局模式匹配 - 即在字符串中尽可能多地匹配。它的行为取决于上下文。在列表上下文中,它返回正则表达式中任何捕获括号匹配的子字符串列表。

和非贪婪的量词

  

默认情况下,量化的子模式是“贪婪的”,也就是说,它将尽可能多地匹配(给定一个特定的起始位置),同时仍然允许模式的其余部分匹配。如果您希望它与可能的最小次数匹配,请使用?跟随量词。请注意,含义不会改变,只是“贪婪”......

相当于

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>

答案 1 :(得分:3)

您可以像这样分割字符串:

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

然后一个简单的foreach将按照您的意愿打印内容。

答案 2 :(得分:2)

最好重构数据库,以便地址不会存储为分隔字符串,但每个地址都作为地址表中的一行...最好将名称和地址作为单独的列... make搜索和操作数据(添加新地址等)要困难得多

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

修改

(无耻地从Prix的答案中窃取格式)

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