将长字符串表示为2d数组PHP

时间:2013-04-05 01:42:09

标签: php string explode multidimensional-array split

我有一个长串说" 123~456 !!! 789~012 !!! 345~678 !!! 901~234 !!! 567~890 !!! 1234~5678"。我已经习惯了这个字符串 !!! 中的分隔符类型。任何人都可以建议我一个有效的方法来爆炸(拆分)这个字符串到二维数组。 示例:

$txt = "123~456!!!789~012!!!345~678!!!901~234!!!567~890!!!1234~5678".

爆炸/分裂后的2D阵列。

array[0][0] = 123 ; array[0][1] = 456 ;
array[1][0] = 789 ; array[1][1] = 012 ; 
array[2][0] = 345 ; array[2][1] = 678 ;
array[3][0] = 901 ; array[3][1] = 234;
array[4][0] = 567 ; array[4][1] = 890;
array[5][0] = 1234 ; array[5][1] = 5678;

感谢。 :)

4 个答案:

答案 0 :(得分:0)

这就是全部:

foreach(explode("!!!",$txt) AS $key => $subarray) {
    $array[$key] = explode("~",$subarray);
}
print_r($array);

快速高效,您将获得二维数组。

请参阅:http://3v4l.org/2fmdn

答案 1 :(得分:0)

您可以使用preg_match_all() PREG_SET_ORDER,然后映射每个项目以消除零索引:

$txt = "123~456!!!789~012!!!345~678!!!901~234!!!567~890!!!1234~5678";

if (preg_match_all('/(\d+)~(\d+)/', $txt, $matches, PREG_SET_ORDER)) {
        $res = array_map(function($item) {
                return array_slice($item, 1);
        }, $matches);
        print_r($res);
}

或者,使用双explode()

$res = array_map(function($item) {
    return explode('~', $item, 2);
}, explode('!!!', $txt));
print_r($res);

答案 2 :(得分:0)

$txt = "123~456!!!789~012!!!345~678!!!901~234!!!567~890!!!1234~5678".
$firstSplit = explode("!!!",$txt);
$newArray = array();


for($i=0;$i<sizeof($firstSplit);$i++){
  $secondSplit = explode("~",$firstSplit[$i]);
  for($j=0;$j<sizeof($secondSplit);$j++){
    $newArray[$i][] = $secondSplit[$j];
 }
}

我觉得这样的事情应该有效。

答案 3 :(得分:0)

查看preg_split()功能。

$txt = "123~456!!!789~012!!!345~678!!!901~234!!!567~890!!!1234~5678";
$array = preg_split ('/!!!|~/', $txt);
print_r($array);

Output: 
Array ( [0] => 123 [1] => 456 [2] => 789 [3] => 012 [4] => 345 [5] => 678 [6] => 901 [7] => 234 [8] => 567 [9] => 890 [10] => 1234 [11] => 5678 )