我有一个包含相当多数据的字符串。我想将数据拆分为2D数组。字符串中的数据由列的〜(代字号)和不同的行分隔:(冒号)。
示例字符串可能是:“伦敦~10~20~寒:纽约~23~53~热:马德里~43~12~干”。
感谢。
答案 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););