取出的结果应该是
array("sina", "sina sohu", "sina yahoo", "sohu", "sohu yahoo", "yahoo");
给100分,大家多提思路,个人认为可能用正则来处理比较方便,preg_split(),嗬嗬,但是对正则表达式不熟悉。
14 个解决方案
#1
哦对了,数组里的单词数据最好能够按照原始字符串中的顺序排列
#2
不会吧,要这样子取?你是做什么用的?不要把问题想复杂了哦。
#3
<?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;
}
}
}
}
?>
$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;
}
}
}
}
?>
#4
实现一个相关的信息列表功能,然后提交到搜索引擎搜索。
比如有一个产品数据是samsang mp3 1200 ,可以提供samsang, mp3, mp3 1200, samsang 1200等数据的搜索链接
比如有一个产品数据是samsang mp3 1200 ,可以提供samsang, mp3, mp3 1200, samsang 1200等数据的搜索链接
#5
wjjchen(redfox),
可否考虑到2个以上单词连接的情况?
也许是我没说清楚吧:如果是"sina sohu yahoo chianren baidu", 那么"sina sohu yahoo"或者"sina sohu yahoo chinaren"也应该算在内的。
可否考虑到2个以上单词连接的情况?
也许是我没说清楚吧:如果是"sina sohu yahoo chianren baidu", 那么"sina sohu yahoo"或者"sina sohu yahoo chinaren"也应该算在内的。
#6
那还是用正则吧:)
#7
<?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>";
}
}
?>
这个就达不到“数组里的单词数据最好能够按照原始字符串中的顺序排列”的要求了。
正则俺也不熟阿。
$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>";
}
}
?>
这个就达不到“数组里的单词数据最好能够按照原始字符串中的顺序排列”的要求了。
正则俺也不熟阿。
#8
<?php
/**
*描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
*参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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 单元总数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)之间
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)));
?>
/**
*描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
*参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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 单元总数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)之间
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)));
?>
#9
如果组合的可能超过15个,什么样的优先?
#10
现在的搜索引擎都可以直接查的吧。不用你分这么多吧。。
如果是你自己的数据表中进行搜索的话,用OR就行了吧。
如果是你自己的数据表中进行搜索的话,用OR就行了吧。
#11
不知道楼主做什么用,
不过挺赞成 keaizhong(可爱钟)(19801010) 的说法,楼主可以回头看看自己的设计,看看是不是有更好的办法:)
不过挺赞成 keaizhong(可爱钟)(19801010) 的说法,楼主可以回头看看自己的设计,看看是不是有更好的办法:)
#12
//===================================
谢谢surfchen(冲浪)和wjjchen(redfox)
冲浪的方法可行。
但希望看看其他人是否还有别的方法。
//===================================
keaizhong(可爱钟)(19801010)和yh801216(艾奥利斯),
也谢谢你们。但我只是希望把一个产品的名称split为字符串数组,然后把这些字符串加上链接,可以提供一些Similar Searches,也许误导了你们,抱歉。
谢谢surfchen(冲浪)和wjjchen(redfox)
冲浪的方法可行。
但希望看看其他人是否还有别的方法。
//===================================
keaizhong(可爱钟)(19801010)和yh801216(艾奥利斯),
也谢谢你们。但我只是希望把一个产品的名称split为字符串数组,然后把这些字符串加上链接,可以提供一些Similar Searches,也许误导了你们,抱歉。
#13
如果考虑速度的话,还是不要用正则表达式或split的好
不过要简单的话,用split最方便
$ws = split(" ",$w);
$i=0;
$ok = "";
foreach($ws as $w)
{
$ok[i] = $w;
$i++;
if($i>15) break;
}
不过要简单的话,用split最方便
$ws = split(" ",$w);
$i=0;
$ok = "";
foreach($ws as $w)
{
$ok[i] = $w;
$i++;
if($i>15) break;
}
#14
$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 19
Warning: asort() expects parameter 1 to be array, null given in F:\PHP\Exercise\zuhe.php on line 20
Warning: Invalid argument supplied for foreach() in F:\PHP\Exercise\zuhe.php on line 21
Warning: implode(): Bad arguments. in F:\PHP\Exercise\zuhe.php on line 25
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 19
Warning: asort() expects parameter 1 to be array, null given in F:\PHP\Exercise\zuhe.php on line 20
Warning: Invalid argument supplied for foreach() in F:\PHP\Exercise\zuhe.php on line 21
Warning: implode(): Bad arguments. in F:\PHP\Exercise\zuhe.php on line 25
#1
哦对了,数组里的单词数据最好能够按照原始字符串中的顺序排列
#2
不会吧,要这样子取?你是做什么用的?不要把问题想复杂了哦。
#3
<?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;
}
}
}
}
?>
$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;
}
}
}
}
?>
#4
实现一个相关的信息列表功能,然后提交到搜索引擎搜索。
比如有一个产品数据是samsang mp3 1200 ,可以提供samsang, mp3, mp3 1200, samsang 1200等数据的搜索链接
比如有一个产品数据是samsang mp3 1200 ,可以提供samsang, mp3, mp3 1200, samsang 1200等数据的搜索链接
#5
wjjchen(redfox),
可否考虑到2个以上单词连接的情况?
也许是我没说清楚吧:如果是"sina sohu yahoo chianren baidu", 那么"sina sohu yahoo"或者"sina sohu yahoo chinaren"也应该算在内的。
可否考虑到2个以上单词连接的情况?
也许是我没说清楚吧:如果是"sina sohu yahoo chianren baidu", 那么"sina sohu yahoo"或者"sina sohu yahoo chinaren"也应该算在内的。
#6
那还是用正则吧:)
#7
<?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>";
}
}
?>
这个就达不到“数组里的单词数据最好能够按照原始字符串中的顺序排列”的要求了。
正则俺也不熟阿。
$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>";
}
}
?>
这个就达不到“数组里的单词数据最好能够按照原始字符串中的顺序排列”的要求了。
正则俺也不熟阿。
#8
<?php
/**
*描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
*参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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 单元总数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)之间
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)));
?>
/**
*描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
*参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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 单元总数
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)之间
*作者:surfchen@gmail.com
*版权:任意复制,修改所有内容.
**/
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)));
?>
#9
如果组合的可能超过15个,什么样的优先?
#10
现在的搜索引擎都可以直接查的吧。不用你分这么多吧。。
如果是你自己的数据表中进行搜索的话,用OR就行了吧。
如果是你自己的数据表中进行搜索的话,用OR就行了吧。
#11
不知道楼主做什么用,
不过挺赞成 keaizhong(可爱钟)(19801010) 的说法,楼主可以回头看看自己的设计,看看是不是有更好的办法:)
不过挺赞成 keaizhong(可爱钟)(19801010) 的说法,楼主可以回头看看自己的设计,看看是不是有更好的办法:)
#12
//===================================
谢谢surfchen(冲浪)和wjjchen(redfox)
冲浪的方法可行。
但希望看看其他人是否还有别的方法。
//===================================
keaizhong(可爱钟)(19801010)和yh801216(艾奥利斯),
也谢谢你们。但我只是希望把一个产品的名称split为字符串数组,然后把这些字符串加上链接,可以提供一些Similar Searches,也许误导了你们,抱歉。
谢谢surfchen(冲浪)和wjjchen(redfox)
冲浪的方法可行。
但希望看看其他人是否还有别的方法。
//===================================
keaizhong(可爱钟)(19801010)和yh801216(艾奥利斯),
也谢谢你们。但我只是希望把一个产品的名称split为字符串数组,然后把这些字符串加上链接,可以提供一些Similar Searches,也许误导了你们,抱歉。
#13
如果考虑速度的话,还是不要用正则表达式或split的好
不过要简单的话,用split最方便
$ws = split(" ",$w);
$i=0;
$ok = "";
foreach($ws as $w)
{
$ok[i] = $w;
$i++;
if($i>15) break;
}
不过要简单的话,用split最方便
$ws = split(" ",$w);
$i=0;
$ok = "";
foreach($ws as $w)
{
$ok[i] = $w;
$i++;
if($i>15) break;
}
#14
$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 19
Warning: asort() expects parameter 1 to be array, null given in F:\PHP\Exercise\zuhe.php on line 20
Warning: Invalid argument supplied for foreach() in F:\PHP\Exercise\zuhe.php on line 21
Warning: implode(): Bad arguments. in F:\PHP\Exercise\zuhe.php on line 25
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 19
Warning: asort() expects parameter 1 to be array, null given in F:\PHP\Exercise\zuhe.php on line 20
Warning: Invalid argument supplied for foreach() in F:\PHP\Exercise\zuhe.php on line 21
Warning: implode(): Bad arguments. in F:\PHP\Exercise\zuhe.php on line 25