<?php
$str = "sina sohu yahoo chianren baidu";
$a = explode(" ",$str);
$num = 15;
if (count($a)>=$num)
{
for ($i=0;$i<$num;$i++)
{
echo $a[$i]."<br>";
}
}else
{
for ($i=0;$i<count($a);$i++)
{
echo $a[$i]."<br>";
$total++;
}
for ($i=0;$i<count($a);$i++)
{
for ($j=$i+1;$j<count($a);$j++)
{
if ($total<15)
{
echo $a[$i]." ".$a[$j]."<br>";
$total++;
}else
{
break;
}
}
}
}?>

解决方案 »

  1.   

    实现一个相关的信息列表功能,然后提交到搜索引擎搜索。比如有一个产品数据是samsang mp3 1200 ,可以提供samsang, mp3, mp3 1200, samsang 1200等数据的搜索链接
      

  2.   

    wjjchen(redfox),可否考虑到2个以上单词连接的情况?
    也许是我没说清楚吧:如果是"sina sohu yahoo chianren baidu", 那么"sina sohu yahoo"或者"sina sohu yahoo chinaren"也应该算在内的。
      

  3.   

    <?php
    $str = "1 2 3 4 5 6";
    $a = explode(" ",$str);
    $num = 15;
    if (count($a)>=$num)
    {
    for ($i=0;$i<$num;$i++)
    {
    echo $a[$i]."<br>";
    }
    }else
    {
    for ($i=0;$i<count($a);$i++)
    {
    echo $a[$i]."<br>";
    }
    for ($i=0;$i<$num-count($a);$i++)
    {
    $word_num=mt_rand(2,count($a));
    $rand_a=array_rand($a,$word_num);
    foreach ($rand_a as $value)
    {
    echo $a[$value]." ";
    }
    echo "<br>";
    }
    }
    ?>
    这个就达不到“数组里的单词数据最好能够按照原始字符串中的顺序排列”的要求了。
    正则俺也不熟阿。
      

  4.   

    <?php
    /**
     *描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
     *参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
     *作者:[email protected]
     *版权:任意复制,修改所有内容.
    **/
    function getSingleComb($input_arr,$delimit,$n)
    {
    if ($n==1)
    {
    return $input_arr;
    }
    $c_num=getCNum($n,count($input_arr));
    $new_arr=array();
    while (1)
    {
    $r_arr=array_rand($input_arr,$n);
    asort($r_arr);
    foreach ($r_arr as $value)
    {
    $tmp_str[]=$input_arr[$value];
    }
    $new_str=implode($delimit,$tmp_str);
    unset($tmp_str);
    if (!in_array($new_str,$new_arr))
    {
    $new_arr[]=$new_str;
    }
    if (count($new_arr)>=$c_num)
    {
    break;
    }
    }
    return $new_arr;

    }
    /**
     *描述:获得组合(请参阅初等数学的排列与组合)个数
     *参数:$m 组合的单元数,$n 单元总数
     *作者:[email protected]
     *版权:任意复制,修改所有内容.
    **/
    function getCNum($m,$n)
    {
    $store_m=$m;
    $store_n=$n;
    $dividend=1;
    for ($m;$m>1;$m--)
    {
    $dividend*=$m;
    }
    $divisor=1;
    for ($n;$n>=($store_n-$store_m+1);$n--)
    {
    $divisor*=$n;
    }
    return $divisor/$dividend;
    }
    /**
     *描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
     *参数:$input_arr 操作对象,$delimit 组合的分割符号,$n_arr 为一个数组,其值范围必须在从1到count($input_arr)之间
     *作者:[email protected]
     *版权:任意复制,修改所有内容.
    **/
    function getMultiComb($input_arr,$delimit,$n_arr)
    {
    $return_arr=array();
    foreach ($n_arr as $value)
    {
    $return_arr=array_merge($return_arr,getSingleComb($input_arr,$delimit,$value));
    }
    return $return_arr;
    }
    $input_arr=explode(" ",'sina sohu yahoo');
    print_r(getMultiComb($input_arr," ",array(1,2,3)));
    ?>
      

  5.   

    不知道楼主做什么用,
    不过挺赞成 keaizhong(可爱钟)(19801010) 的说法,楼主可以回头看看自己的设计,看看是不是有更好的办法:)
      

  6.   

    //===================================
    谢谢surfchen(冲浪)和wjjchen(redfox)冲浪的方法可行。
    但希望看看其他人是否还有别的方法。//===================================
    keaizhong(可爱钟)(19801010)和yh801216(艾奥利斯),也谢谢你们。但我只是希望把一个产品的名称split为字符串数组,然后把这些字符串加上链接,可以提供一些Similar Searches,也许误导了你们,抱歉。
      

  7.   

    如果考虑速度的话,还是不要用正则表达式或split的好
    不过要简单的话,用split最方便
    $ws = split(" ",$w);
    $i=0;
    $ok = "";
    foreach($ws as $w)
    {
      $ok[i] = $w;
      $i++;
      if($i>15) break;
    }
      

  8.   

    $input_arr=explode(" ",'sina sohu yahoo,google,tom');
    echo "<pre>";
    print_r(getMultiComb($input_arr," ",array(1,2,3,4)));echo "</pre>";Warning:  array_rand(): Second argument has to be between 1 and the number of elements in the array in F:\PHP\Exercise\zuhe.php on line 19Warning:  asort() expects parameter 1 to be array, null given in F:\PHP\Exercise\zuhe.php on line 20Warning:  Invalid argument supplied for foreach() in F:\PHP\Exercise\zuhe.php on line 21Warning:  implode(): Bad arguments. in F:\PHP\Exercise\zuhe.php on line 25