2012-04-08 4 views
0

そう言えば、そういう文字列があります。アマチュアと配列

$pizza = 1,2,3,5-4,7; 

と、私はそれから抜け出すにしたい、そのセットのうち5-7ですが、5-7は、任意のコンボも6-9または10-1を言うと、これが複数回発生する可能性があるという。それから私は、だから私は、その値(5-7)を得るのですか私にこの

print_r($return); 

Array ([0] => Array ([0] => 5-7) [1] => Array ([0] => 5-7)) 

を与える

preg_match_all("/(\d\-\d)/", $pizza, $return); 

を使用するための助けを得

このような

$pizza=1-4,2,3-1,5-4,7; 

としてとそれを変数に代入する$slice

+1

複数回発生する可能性がある場合、どのように作業しますか?配列であることを気にしない限り、文字列/数値変数に割り当てることはできますか? – BenOfTheNorth

+1

'$ slice = $ return [0] [0]'を意味しましたか? – Eineki

+0

よく番号5-7は複数回は出ませんが、もしそれが6-7か5-2かどうかを言い、それぞれを自分の変数に割り当ててください。 –

答えて

2

あなたはすでに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 > 
} 

しかし、パフォーマンスの違いが操作するため、このような小さなデータ量と無視できるので、これは単なる個人的な好みの問題です:

は、私はあなたのタスクを解決するために異なるアプローチを使用していると述べました。