配列値が文字列内に現れる順序を決定する方法を見つける

WBOY
リリース: 2016-06-23 13:38:40
オリジナル
798 人が閲覧しました

配列
$arr=array('A','M','N');
文字列は変数ですが、M と N は文字列内に 1 回しか出現できません。複数回出現した場合は 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 Returns 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        ))
ログイン後にコピー
ログイン後にコピー

モデレータさん、熱心な回答ありがとうございました。
しかし、それは意味するものではありません。コードによって表示される結果は、私が望む結果ではありません。
結果は偶然であるため、配列の最初の 3 つの結果は正しく、4 番目の戻り値は間違っています。
私の表現が混乱しているかもしれません。

$arr = array('(title)','(url)','(img)');$str = '<li><a href="(url)" title="(title)" ><img src=(img) /></a></li>';
ログイン後にコピー

私が今取得したいのは、(title は 2 番目に出現する)、url は最初に出現するもの、img は 3 番目に出現するものです。
そして、次の文字列
$str = '<li><a href="(url)"  title="(title)" >(title)<img src=(img) /></a></li>';
ログイン後にコピー

今取得したいのは、(title は 2 番目と 3 番目の出現)、url は 1 番目の出現、img は 4 番目の出現です。

$arr = array('A','M','N');

$str = 'AMN';
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';

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';

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;




$arr = array('A','M','N');
$str = 'AMN'

$data = array(); ) {

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 は 2 回目の出現で、結果は 1、N は 3 回目の出現で、2 になるはずです。

スターズ コンサートには 3 人の大きな歌手とたくさんの小さな歌手が出演しました。
大物歌手は、アンディ・ラウ、ジャッキー・チャン、JJ Lin です

主催者は出演順を調整し、JJ Lin は若くてさらに数曲歌いましたが、他の 2 人は元気がなく 1 曲しか歌っていませんでした。
Jacky Cheung,XXX,XXX,JJ Lin,XXX,JJ Lin,XXX,XXX,Andy Lau,XXX,JJ Lin Andy Lau 4

これが明確に説明されているかどうかはわかりません。


結果

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



結果

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

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

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

$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);
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート