首頁 > 後端開發 > php教程 > 求一个判断数组值在字符串中出现的顺序

求一个判断数组值在字符串中出现的顺序

WBOY
發布: 2016-06-23 13:38:40
原創
802 人瀏覽過

数组
$arr=array('A','M','N');
字符串不定,但是M和N在字符串中只能出现一次,如果出现多次则返回false
符合要求则返回数组$data['M'],$data['N']
比如:
A MAN  返回 2,4   //M为数组中第2个出现,N为数组中第4个出现 (A出现在1和3)
A BOY 返回 false //不含M或者N
MAN 返回1,3   //M为数组中第1个出现,N为数组中第3个出现 (A出现在2)
A ATM IN 返回 3,5   //M为数组中第3个出现,N为数组中第4个出现 (A出现在1和2)


回复讨论(解决方案)

本来一个简单的问题,被你已解释变得复杂了
开看这段代码的结果就知道该怎么做了

$arr = array('A','M','N');$data = array(  'A MAN',  'A BOY',  'MAN',  'A ATM IN');foreach($data as $text) {  $t = str_split($text);  $r[] = array_intersect($t, $arr);}print_r($r);
登入後複製
登入後複製
Array(    [0] => Array        (            [0] => A            [2] => M            [3] => A            [4] => N        )    [1] => Array        (            [0] => A        )    [2] => Array        (            [0] => M            [1] => A            [2] => N        )    [3] => Array        (            [0] => A            [2] => A            [4] => M            [7] => N        ))
登入後複製
登入後複製

本来一个简单的问题,被你已解释变得复杂了
开看这段代码的结果就知道该怎么做了

$arr = array('A','M','N');$data = array(  'A MAN',  'A BOY',  'MAN',  'A ATM IN');foreach($data as $text) {  $t = str_split($text);  $r[] = array_intersect($t, $arr);}print_r($r);
登入後複製
登入後複製
Array(    [0] => Array        (            [0] => A            [2] => M            [3] => A            [4] => N        )    [1] => Array        (            [0] => A        )    [2] => Array        (            [0] => M            [1] => A            [2] => N        )    [3] => Array        (            [0] => A            [2] => A            [4] => M            [7] => N        ))
登入後複製
登入後複製


多谢版主热心解答。
但 不是这个意思,你的代码显示出来的结果不是我要的结果,
数组前三个结果正确,是因为结果凑巧,第四个返回就是错误的。
可能是我表达比较混乱。

$arr = array('(title)','(url)','(img)');$str = '<li><a href="(url)" title="(title)" ><img  src=(img) / alt="求一个判断数组值在字符串中出现的顺序" ></a></li>';
登入後複製

我现在要得到的是 (title是第2个出现),url是第1个出现 img是第3个出现。
而下面的字符串
$str = '<li><a href="(url)"  title="(title)" >(title)<img  src=(img) / alt="求一个判断数组值在字符串中出现的顺序" ></a></li>';
登入後複製

我现在要得到的是 (title是第2,3个出现),url是第1个出现 img是第4个出现。

$arr = array('A','M','N');
$str = 'AMN';
$data = array();
foreach($arr as $v){
if(substr_count($str,$v) == 1){
$data[$v] = strpos($str,$v);
}
}
var_dump($data);

$arr = array('A','M','N');
$str = 'AMN';
$data = array();
foreach($arr as $v){
if(substr_count($str,$v) == 1){
$data[$v] = strpos($str,$v);
}
}
var_dump($data);


如果$str = 'AMTN'就会出错啦


$arr = array('A','M','N');
$str = 'AMN';
$data = array();
foreach($arr as $v){
if(substr_count($str,$v) == 1){
$data[$v] = strpos($str,$v);
}
}
var_dump($data);


如果$str = 'AMTN'就会出错啦



没出错啊
array(3) { ["A"]=> int(0) ["M"]=> int(1) ["N"]=> int(3) }



$arr = array('A','M','N');
$str = 'AMN';
$data = array();
foreach($arr as $v){
if(substr_count($str,$v) == 1){
$data[$v] = strpos($str,$v);
}
}
var_dump($data);


如果$str = 'AMTN'就会出错啦



没出错啊
array(3) { ["A"]=> int(0) ["M"]=> int(1) ["N"]=> int(3) }


M是第二出场,结果1,N是第3个出场,应该是2才对。

群星演唱会来了三个大歌手和一堆小歌星。
大歌星分别是:刘德华,张学友,林俊杰
举办方安排了出场顺序,林俊杰年轻点多唱了几首,其他两个没精力只唱了一首。
张学友,XXX,XXX,林俊杰,XXX,林俊杰,XXX,XXX,刘德华,XXX,林俊杰XXX
我现在需要排的是 他们三人的出场顺序
结果应该是林俊杰 2,3,5
张学友1
刘德华4
不知道这样解释清楚了没有。

$arr = array('A','M','N');$str = 'AMTN';$data = array();foreach($arr as $v){		if(substr_count($str,$v) == 1){		$data[$v] = strpos($str,$v)+1;	}}var_dump($data);
登入後複製
登入後複製


结果

array(3) { ["A"]=> int(1) ["M"]=> int(2) ["N"]=> int(4) }

$arr = array('A','M','N');$str = 'AMTN';$data = array();foreach($arr as $v){		if(substr_count($str,$v) == 1){		$data[$v] = strpos($str,$v)+1;	}}var_dump($data);
登入後複製
登入後複製


结果

array(3) { ["A"]=> int(1) ["M"]=> int(2) ["N"]=> int(4) }


我要的结果N是3
只统计 AMN的顺序 倒是你个了我思路,我把数组键和值反转一下,看能不能得到结果。

搞定了,用正则匹配出的。唉!~

$arr = array('(title)','(url)','(img)');		$str = '<li><a href="(url)" title="(title)" ><img  src=(img) / alt="求一个判断数组值在字符串中出现的顺序" >(title)</a></li>';		preg_match_all('/(\(title\)|\(url\)|\(img\))/i',$str,$data);		print_r($data);
登入後複製

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板