需要在php explode上添加第二行和第三个分隔符

时间:2011-12-22 01:16:28

标签: php explode

这是我的另一个成功回答的问题:stackoverflow.com/questions/8597929/need-to-create-li-with-list-of-different-links-using-php-explode-method

现在我有了这个:

<?php
$separator1 = "\n";
$separator2 = ":";
$textarea = get_custom_field('my_custom_output');
$array = explode($separator1,$textarea);
$output = ''; // initialize the variable
foreach ($array as $item) {
    list($item_text, $item_links) = explode($separator2, trim($item));
    $output .= '<li class="link-class"><a title="' . $item_text . '" href="http://mywebsite.com/' . $item_links . '">' . $item_text . '</a></li>';
}
?>

<ul>
<?php print $output; ?>
</ul>

并且,在textarea中使用以下内容定义为“my_custom_output”:

text1:text1-page-url
text2:new-text2-page
text3:different-page-text3

,结果是

text1
text2
text3

已成功链接和样式化。 (我没有让他们链接,因为stackoverflow不允许我发布超过两个链接,因为我只有3个代表。)

所以我的下一个也是最后一个期望的任务就是这样做:

text1
description 1
text2
description 2
text3
description 3

其中text1等像以前一样链接,但描述没有链接。

所以我会尽力而为,在stackoverflow中,尝试一下。但是,我希望我需要一些帮助。我们走吧:

<?php
$separator1 = "\n";
$separator2 = ":";
$separator3 = ";";
$textarea = get_custom_field('my_custom_output');
$array = explode($separator1,$textarea);
$output = ''; // initialize the variable
foreach ($array as $item) {
    list($item_text, $item_links) = explode($separator2, trim($item));
    $output .= '<li class="link-class"><a title="' . $item_text . '" href="http://mywebsite.com/' . $item_links . '">' . $item_text . '</a><br /><span class="desc-class">' . $item_desc . '</span></li>';
}
?>

<ul>
<?php print $output; ?>
</ul>

并在textarea中使用以下内容,该文件被定义为“my_custom_output”:

text1:text1-page-url;Text1 Description
text2:new-text2-page;Description For Text2
text3:different-page-text3;A Text3 Description

我需要输出:

我不知道分号是否有效,但我不能使用空格(\ s),因为描述中有空格。我愿意接受建议。

=============================================== =====

我最新的尝试:

<?php
$separator1 = "\n";
$separator2 = ":";
$separator3 = ";";
$textarea = get_custom_field('my_custom_output');
$array = explode($separator1,$textarea);
$output = ''; // initialize the variable
foreach ($array as $item) {
    $itemarray = explode($separator2, trim($item));
    $item_text = $itemarray[0];
    list($item_links, $item_desc) = explode($separator3,$itemarray[1]);

    $output .= '<li class="link-class"><a title="' . $item_text . '" href="http://mywebsite.com/' . $item_links . '">' . $item_text . '</a><br /><span class="desc-class">' . $item_desc . '</span></li>';
}
?>

<ul>
<?php print $output; ?>
</ul>

IT工作!!! = d

2 个答案:

答案 0 :(得分:0)

不确定我是否理解得这么好(我不确定get_custom_field()会给你带来什么 - 无法找到它作为常规PHP函数),但是当你爆炸一个具有多个分隔符实例的项目时,你会得到多个阵列。

所以:

$textarea = "text1:text1-page-url;Text1 Description";
$data = explode(':',$textarea);
// at this point $data[0] will contain "text1", while $data[1] contains text1-page-url;Text1 Description"
$descarray = explode(';',$data[1]);
// then $descarray[0] contains "text1-page-url" and $descarray[1] contains "Text1 Description" so you can echo this out however you like. 

使用您的代码.. 假设每个$ item是此时的每一行,如下所示:

$item = "text1:text1-page-url;Text1 Description";

然后这将解决问题:

foreach ($array as $item) {
    $itemarray = explode($separator2, trim($item));
    $item_text = $itemarray[0];
    list($item_links, $item_desc) = explode(';',$itemarray[1]);

    $output .= '<li class="link-class"><a title="' . $item_text . '" href="http://mywebsite.com/' . $item_links . '">' . $item_text . '</a><br /><span class="desc-class">' . $item_desc . '</span></li>';
}

答案 1 :(得分:0)

我稍微优化了算法,因为不需要第二个explode()。只需使用相同的分隔符将一行中的子字符串分开(并且不要忘记在所有数据中转义该分隔符):

<?php
$row_separator = "\n";
$line_separator = ":";
$textarea = get_custom_field('my_custom_output');
$array = explode($row_separator, $textarea);
$output = ''; // initialize the variable
foreach ($array as $item) {
    list($item_text, $item_links, $item_desc) = explode($line_separator, trim($item));
    $output .= '<li class="link-class"><a title="' . $item_text . '" href="http://mywebsite.com/' . $item_links . '">' . $item_text . '</a><br /><span class="desc-class">' . $item_desc . '</span></li>';
}
?>

<ul>
<?php print $output; ?>
</ul>

以下是我建议使用的数据格式(将所有字段分开:

text1:text1-page-url:Text1 Description
text2:new-text2-page:Description For Text2
text3:different-page-text3:A Text3 Description