PHP - 将字符串拆分为多维数组的无循环方式

时间:2009-12-22 18:20:01

标签: php arrays string scripting

如何在没有循环的情况下将字符串拆分为PHP中的多维数组?

我的字符串格式为"A,5|B,3|C,8"

7 个答案:

答案 0 :(得分:7)

如果没有实际上正在执行循环部分,那么基于array_map + explode的内容应该可以做到;例如,考虑到你使用的是PHP 5.3:

$str = "A,5|B,3|C,8";

$a = array_map(
    function ($substr) {
        return explode(',', $substr);
    }, 
    explode('|', $str)
);
var_dump($a);

会得到你:

array
  0 => 
    array
      0 => string 'A' (length=1)
      1 => string '5' (length=1)
  1 => 
    array
      0 => string 'B' (length=1)
      1 => string '3' (length=1)
  2 => 
    array
      0 => string 'C' (length=1)
      1 => string '8' (length=1)

当然,这部分代码可以重写为不使用lambda函数,并使用PHP< 5.3 - 但没有那么有趣^^


不过,我认为array_map将遍历explode返回的数组的每个元素...所以,即使循环不在你的代码中,仍然会有一个...

答案 1 :(得分:3)

根本没有循环?无法做到。没有你必须编写循环?爆炸或正则表达式“拆分”方法之一。

答案 2 :(得分:2)

preg_match_all("~([^|,]+),([^|,]+)~", $str, $m);
$result = array_combine($m[1], $m[2]);

这将返回一个类似数组的数组('A'=> 5,'B'=> 3等

答案 3 :(得分:0)

你可以使用map和explode的组合,但是你并没有真正避免循环,你只是不使用for / while语句。

http://php.net/manual/en/function.array-map.php

答案 4 :(得分:0)

如果您的数据很大,这可能会变得很重,但这是一个解决方案:

<?php
$data = "A,5|B,3|C,8";
$search = array("|",",");
$replace = array("&","=");
$array = parse_str(str_replace($search, $replace, $data));
?>

会产生这样的结果:

$array = array(
  A => 5,
  B => 3,
  C => 8,
);

答案 5 :(得分:0)

取决于array_walk()是否算作循环...

<?php

class Splitter {  
  function __construct($text){
    $this->items = array();
    array_walk(explode('|', $text), array($this, 'split'));
  }

  function split($input){
    $this->items[] = explode(',', $input);
  }
}

$s = new Splitter("A,5|B,3|C,8");
print_r($s->items);

答案 6 :(得分:-2)

小循环最好。

$array1 = split('|',$data);
$final=array();
$foreach($array1 as $arraypart) {
$part = split(',',$arraypart);
$final[$part[0]] = $part[1];
}