这是我的另一个成功回答的问题: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
答案 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