使用PHP将文本拆分为两列

7

我想知道是否有可能将文本分为两部分。

在我的网站上,我有一个产品描述(500-1000个单词),我想以以下方式显示:

<div class="text-col">
    <?php echo nl2br($col1); ?>
</div>


<div class="text-col">
    <?php echo nl2br($col2); ?>
</div>
5个回答

10

像这样的吗?

$len = strlen($input);
$space = strrpos($input," ",-$len/2);
$col1 = substr($input,0,$space);
$col2 = substr($input,$space);
// now output it

尝试了这个代码,它的表现有点奇怪。第一列中有文本,而第二列只有一个单词,即文本中的最后一个单词。 - Psyche
1
这里有个打字错误;应该是 strpos 而不是 strrpos - Silviu-Marian
实际上,我的笔误是我忘记在 strrpos 的长度参数中加入 - - Niet the Dark Absol
@NiettheDarkAbsol,这会破坏HTML。我能找到什么解决方案? - jcarlosweb

8
这在我的看法中是一个典型的问题,应该通过CSS来解决,因为它只影响显示效果。为什么不使用CSS3的column-count呢?
div#multicolumn1 {
  -moz-column-count: 3;
  -moz-column-gap: 20px;
  -webkit-column-count: 3;
  -webkit-column-gap: 20px;
  column-count: 3;
  column-gap: 20px;
}

(从http://www.quirksmode.org/css/multicolumn.html复制)


1
现代浏览器尚未实现此功能。http://caniuse.com/#search=column - matmancini
2
这是最佳答案,因为大多数浏览器都支持此功能(虽然大部分需要前缀,但它可以正常工作)。 - rafaelmorais

1
在PHP中,您可以轻松地将文本分成两部分:
$text = "my very long text with a lot of words";
$length = strlen($text);
$middle = round($length/2, 0);
$col1 = substr($text, 0, $middle);
$col2 = substr($text, $middle);

但是这些单词经常会在单词中间被截断。因此,您需要更新代码以找到最近的空格:

for ($i = $middle; $i < $length; $i ++) {
    if ( substr($text, $i, 1) == " " ) return;
}
$cut = $i;
$col1 = substr($text, 0, $cut);
$col2 = substr($text, $cut+1);

空格并不是一个好的文本截断位置。因此,您需要寻找行尾。有些空格也不好用。例如,分号前面的空格。因此,您需要改进代码以获得更好的结果。

您还可以尝试使用CSS3多列指令: http://www.css3.info/preview/multi-column-layout/ 但它不受IE支持。


这会破坏HTML。有什么解决方案吗? - jcarlosweb
如果文本中包含HTML,那么将其拆分可能会更加复杂,这取决于其中的HTML类型。这里有一些不错的答案:https://dev59.com/HGQn5IYBdhLWcg3wxZgn - Matthieu
非常感谢。事实是变得非常复杂了。 - jcarlosweb

0
你能使用 wordwrap() 函数吗?

0

这很简单:

$text = "This should be a very long product description with some bold specs in it.";
$splitat = strpos($text," ",strlen($text)/2);
$col1 = substr($text, 0, $splitat);
$col2 = substr($text, $splitat);

实际情况是,你可能希望在客户端完成这个操作,因为可能涉及到其他因素,比如段落宽度、连字、文本块高度等等。
在CSS3中,你已经可以支持多列文本了。

这会破坏HTML。有什么解决方案吗? - jcarlosweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接