あなたはすでにpreg_match_allの概要を知っているはずです。
3番目のパラメータは、テキストにあるすべての一致を含む配列です(2番目のパラメータ)。
これは、異なる配列のセットを含む配列です。最初の配列には、パターンが一致しています。他はサブパターンのマッチです。私は正規表現のエッセイを書くのではなく、あなたがそれらを知っていると仮定します(リフレッシュ:サブパターンはカッコで囲まれたものであり、あなたのケースではまったく役に立たない)。
$pizza='1-4,2,3-1,5-4,7';
preg_match_all("/\d\-\d/", $pizza, $return);
var_dump($return);
同様の、あまり混乱しない結果(正規表現には括弧はありません)があります。
array
0 =>
array
0 => string '1-4' (length=3)
1 => string '3-1' (length=3)
2 => string '5-4' (length=3)
あなたがより簡単にしますprint_r形式見つけた場合:あなたはforeach制御構造を使用することができます一度に配列の要素を消費する
Array ([0]=>Array([0]=>1-4 [1]=>3-1 [2]=>5-4))
を。
次のようになりますあなたの運動を行うためのコード:
foreach ($return[0] as $slice) {
<do whatever you need with $slice >
}
中括弧内のコードが一致したスライスを持つ配列$リターン[0](配列への要素として何度も実行されます)、$ sliceは異なる要素の値をとるでしょう 異なる実行で。
これがあなたの疑問を解決することを願っています。
$pizza='1-4,2,3-1,5-4,7';
$return = array_filter(
explode(',',$pizza), // turn the string into an array
function($x){return strpos($x,'-');} // filter out the slices without a -
);
foreach ($return as $slice) { // NOTE: no $return[0]
<do whatever you need with $slice >
}
しかし、パフォーマンスの違いが操作するため、このような小さなデータ量と無視できるので、これは単なる個人的な好みの問題です:
は、私はあなたのタスクを解決するために異なるアプローチを使用していると述べました。
複数回発生する可能性がある場合、どのように作業しますか?配列であることを気にしない限り、文字列/数値変数に割り当てることはできますか? – BenOfTheNorth
'$ slice = $ return [0] [0]'を意味しましたか? – Eineki
よく番号5-7は複数回は出ませんが、もしそれが6-7か5-2かどうかを言い、それぞれを自分の変数に割り当ててください。 –