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

qq_26218997 2015-03-14 05:31:48
数组
$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)
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_26218997 2015-03-15
  • 打赏
  • 举报
回复
搞定了,用正则匹配出的。唉!~
$arr = array('(title)','(url)','(img)');
		$str = '<li><a href="(url)" title="(title)" ><img src=(img) />(title)</a></li>';
		preg_match_all('/(\(title\)|\(url\)|\(img\))/i',$str,$data);
		print_r($data);
qq_26218997 2015-03-14
  • 打赏
  • 举报
回复
引用 8 楼 key_meixinmeifei 的回复:

$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的顺序 倒是你个了我思路,我把数组键和值反转一下,看能不能得到结果。
key_酶心酶肺 2015-03-14
  • 打赏
  • 举报
回复

$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) }
qq_26218997 2015-03-14
  • 打赏
  • 举报
回复
群星演唱会来了三个大歌手和一堆小歌星。 大歌星分别是:刘德华,张学友,林俊杰 举办方安排了出场顺序,林俊杰年轻点多唱了几首,其他两个没精力只唱了一首。 张学友,XXX,XXX,林俊杰,XXX,林俊杰,XXX,XXX,刘德华,XXX,林俊杰XXX 我现在需要排的是 他们三人的出场顺序 结果应该是林俊杰 2,3,5 张学友1 刘德华4 不知道这样解释清楚了没有。
qq_26218997 2015-03-14
  • 打赏
  • 举报
回复
引用 5 楼 key_meixinmeifei 的回复:
[quote=引用 4 楼 qq_26218997 的回复:] [quote=引用 3 楼 key_meixinmeifei 的回复:] $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'就会出错啦[/quote] 没出错啊 array(3) { ["A"]=> int(0) ["M"]=> int(1) ["N"]=> int(3) }[/quote] M是第二出场,结果1,N是第3个出场,应该是2才对。
key_酶心酶肺 2015-03-14
  • 打赏
  • 举报
回复
引用 4 楼 qq_26218997 的回复:
[quote=引用 3 楼 key_meixinmeifei 的回复:] $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'就会出错啦[/quote] 没出错啊 array(3) { ["A"]=> int(0) ["M"]=> int(1) ["N"]=> int(3) }
qq_26218997 2015-03-14
  • 打赏
  • 举报
回复
引用 3 楼 key_meixinmeifei 的回复:
$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'就会出错啦
key_酶心酶肺 2015-03-14
  • 打赏
  • 举报
回复
$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);
qq_26218997 2015-03-14
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
本来一个简单的问题,被你已解释变得复杂了 开看这段代码的结果就知道该怎么做了
$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) /></a></li>';
我现在要得到的是 (title是第2个出现),url是第1个出现 img是第3个出现。 而下面的字符串

$str = '<li><a href="(url)"  title="(title)" >(title)<img src=(img) /></a></li>';
我现在要得到的是 (title是第2,3个出现),url是第1个出现 img是第4个出现。
xuzuning 2015-03-14
  • 打赏
  • 举报
回复
本来一个简单的问题,被你已解释变得复杂了 开看这段代码的结果就知道该怎么做了
$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
        )

)

21,873

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧