かなりのデータが含まれている文字列があります。私は2次元配列にデータを分割したいと思います。文字列内のデータは、列の場合は〜(チルダ)、異なる行の場合は(コロン)で分割されます。PHP:文字列を2D配列に分割する
"London〜10〜20〜cold:ニューヨーク〜23〜53〜hot:Madrid〜43〜12〜dry"の文字列の例があります。
ありがとうございました。
かなりのデータが含まれている文字列があります。私は2次元配列にデータを分割したいと思います。文字列内のデータは、列の場合は〜(チルダ)、異なる行の場合は(コロン)で分割されます。PHP:文字列を2D配列に分割する
"London〜10〜20〜cold:ニューヨーク〜23〜53〜hot:Madrid〜43〜12〜dry"の文字列の例があります。
ありがとうございました。
$string = "London~10~20~cold:New York~23~53~hot:Madrid~43~12~dry";
$array = explode(':', $string);
foreach($array as &$value) $value = explode('~', $value);
機能的な方法(必要な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));
私はそれを掘り出します。 (フィラー) – erisco
あなたは(爆発と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(...)
}
"機能的" なスタイルは
$array = array_map(function($value) {
return explode('~', $value);
}, explode(':',$string););
別の方法としては、次のようになります。それはそれで面倒だ
preg_match_all('/(.*?)~(.*?)~(.*?)~(.*?)(?:$|:)/', $string, $array,
PREG_SET_ORDER);
あなたが列形式を事前に定義する必要があります。また、各行[0]で完全一致を返します。それ以外の場合(PREG_SET_ORDERのため)、それはあなたの望む2d形式です。
マイクロオプティマイザを喜ばせ、同時に迷惑をかけるためにここに投稿してください。一般的なStackoverflow memeにもかかわらず、正規表現は、explodeループより3倍高速です。
クルードはスピードについては信じていません。そしてテストされた。さてあなたはそれについて正しいです。 $ array [x] [0]には望ましくない完全な行が含まれているので、フォーマットは正確ではありません。さらに、あなたのソリューションは読みにくいと思います。とにかく、パフォーマンスについてそれを指摘してくれてありがとう... – yankee
結果をどのようにするべきかの例を挙げることはできますか? – Ikke
2D配列とは何ですか?あなたは例を挙げることができますか?あなたはこれを意味しましたか: '$ arr [first] [second]' – Eray
[PHP - 文字列を多次元配列に分割するための無理な方法](http://stackoverflow.com/questions/1948217/php-loopless-多方向配列にストリングを分割する) – hakre