2011-02-05 16 views
1

かなりのデータが含まれている文字列があります。私は2次元配列にデータを分割したいと思います。文字列内のデータは、列の場合は〜(チルダ)、異なる行の場合は(コロン)で分割されます。PHP:文字列を2D配列に分割する

"London〜10〜20〜cold:ニューヨーク〜23〜53〜hot:Madrid〜43〜12〜dry"の文字列の例があります。

ありがとうございました。

+0

結果をどのようにするべきかの例を挙げることはできますか? – Ikke

+0

2D配列とは何ですか?あなたは例を挙げることができますか?あなたはこれを意味しましたか: '$ arr [first] [second]' – Eray

+0

[PHP - 文字列を多次元配列に分割するための無理な方法](http://stackoverflow.com/questions/1948217/php-loopless-多方向配列にストリングを分割する) – hakre

答えて

8
$string = "London~10~20~cold:New York~23~53~hot:Madrid~43~12~dry"; 
$array = explode(':', $string); 
foreach($array as &$value) $value = explode('~', $value); 
+0

Brilliant。ありがとうございました。私の文字列が ':'で始まる場合、配列の最初の行を空にする方法は? – Joseph

+0

コロン 'if($ string [0] == ':')$ string = substr($ string、1);'を削除するか、空の行 'if(count($ array)&&!strlen($) $ array = array_slice($ array、1); '(空文字列を編集してstrlenに変更) – yankee

3

機能的な方法(必要なPHPの5.3.x):

$string = "London~10~20~cold:New York~23~53~hot:Madrid~43~12~dry"; 
$map = array_map(function($el) { 
    return explode('~', $el); 
}, explode(':', $string)); 
+0

私はそれを掘り出します。 (フィラー) – erisco

0

あなたは(爆発とPHPでデータを分割することができます)。 まず、文字列を分割する必要があります。これは、explode()でエントリを再度分割する必要があります。

$data = explode(':', $string); 
$array = array(); 
foreach($data as $d) { 
    $d = explode('~', $d); 
    $array[] = $d; //e.g. $array[0][0] --> London 
    //$array[$d[0]] = array('temperature' => $d[1], 'dont-know' => $d[2], 'climate' => $d[3]); //e.g. $arra['London'] => array(...) 
} 
0

"機能的" なスタイルは

$array = array_map(function($value) { 
return explode('~', $value); 
}, explode(':',$string);); 
3

別の方法としては、次のようになります。それはそれで面倒だ

preg_match_all('/(.*?)~(.*?)~(.*?)~(.*?)(?:$|:)/', $string, $array, 
PREG_SET_ORDER); 

あなたが列形式を事前に定義する必要があります。また、各行[0]で完全一致を返します。それ以外の場合(PREG_SET_ORDERのため)、それはあなたの望む2d形式です。

マイクロオプティマイザを喜ばせ、同時に迷惑をかけるためにここに投稿してください。一般的なStackoverflow memeにもかかわらず、正規表現は、explodeループより3倍高速です。

+0

クルードはスピードについては信じていません。そしてテストされた。さてあなたはそれについて正しいです。 $ array [x] [0]には望ましくない完全な行が含まれているので、フォーマットは正確ではありません。さらに、あなたのソリューションは読みにくいと思います。とにかく、パフォーマンスについてそれを指摘してくれてありがとう... – yankee

関連する問題