PHP:将字符串拆分为2D数组

时间:2011-02-05 21:35:53

标签: php

我有一个包含相当多数据的字符串。我想将数据拆分为2D数组。字符串中的数据由列的〜(代字号)和不同的行分隔:(冒号)。

示例字符串可能是:“伦敦~10~20~寒:纽约~23~53~热:马德里~43~12~干”。

感谢。

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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));

答案 2 :(得分:3)

另一种选择是:

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

由于必须预定义列格式,因此更麻烦。它还返回每行[0]中的完整匹配。否则(由于PREG_SET_ORDER)它是你想要的2d格式。

只需将其发布在此处即可取悦微型优化器。尽管常见的Stackoverflow meme,正则表达式比爆炸循环快三倍。

答案 3 :(得分:0)

您可以使用explode()在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(...)
}

答案 4 :(得分:0)

“功能”风格

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