从字符串php构建多维数组

时间:2011-12-14 17:35:44

标签: php

编辑:以下是$preparedstring的一部分:

  

555555,Jones,Brian,NYC,1000,2011-10-21 00:00:00,Check,1542,0 ,, Check ,, 0 ,, Check ,,; 6666666,Miler,Christopher,Chicago,1000,2011-10-26 00:00:00,Check,6406,0 ,, Check ,, 0 ,, Check ,,,;

我正在尝试将HTML表格转换为多维数组。我已将表转换为长字符串,每个单元格用逗号分隔,每行用分号分隔。

我不确定如何从这个字符串构建多维数组。这是我到目前为止所尝试的:

<?php    
$outerARR = explode(";", $preparedstring);

    $arr = array
    (
    foreach ($outerARR as $arrvalue) {
        $innerarr = explode(",", $arrvalue);
        $innerarr[0]=>array
        (
         $innerarr[];
         )
    }
    );
?>

这给了我

附近的语法错误
  

$ arr = array

     
    

  

打开括号。

4 个答案:

答案 0 :(得分:6)

你解决这个问题的方法很遗憾,虽然你的问题有很多解决办法,我会用下面的东西。


代码如何运作?

首先我们使用explode将字符串拆分为较小的块,;是我们的分隔符。

我们将这个新创建的数组传递给array_map,因为它是第二个参数。

array_map有两个参数,第一个是为第二个参数的每个成员调用的函数(应该是一个数组)。

在我们回复array_map的内部,我们使用explode再次拆分值,现在以,作为我们的分隔符。


$data = "1,2,3;4,5,6;7,8,9";

$ret = array_map (
  function ($_) {return explode (',', $_);},
  explode (';', $data)
);

print_r ($ret);

输出

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )

)

它不起作用,为什么?

可能是因为您使用的是5.3之前的PHP版本,如果是这样,您可以使用此代码段:

function explode_by_comma ($_) {
  return explode (',', $_);
}

$ret = array_map ('explode_by_comma', explode (';', $data));

答案 1 :(得分:2)

<?php

//explode first dimension of the array to create an array of rows
$outerARR = explode(";", $preparedstring);

$arr = array();

//iterate through the newly created array
foreach ($outerARR as $arrvalue) {

    //explode this row into columns
    $innerarr = explode(",", $arrvalue);

    //add the newly created array of columns to the output array as a new index
    $arr[] = $innerarr;
}
?>

答案 2 :(得分:2)

你很接近,但arrays不这样做。你不能把foreach放在像这样的数组构造函数中。它应该是这样的:

$outerARR = explode(";", $preparedstring);
$arr = array();
foreach ($outerARR as $arrvalue){
   $innerarr = explode(",", $arrvalue);
   $arr[] = $innerarr;
}

演示:http://codepad.org/I5wFFczR

答案 3 :(得分:0)

$outerARR = explode(";", $preparedstring);
$a = array();
$y=0;
foreach ($outerARR as $arrvalue){
    $x=0;
    $innerarr = explode(",", $arrvalue);
    foreach($innerarr as $v){
        $a[$y][$x++] = $v;
    }
    $y++;
}
print_r($a);



Array
(
    [0] => Array
        (
            [0] => 555555
            [1] => Jones
            [2] => Brian
            [3] => NYC
            [4] => 1000
            [5] => 2011-10-21 00:00:00
            [6] => Check
            [7] => 1542
            [8] => 0
            [9] =>  
            [10] => Check
            [11] =>  
            [12] => 0
            [13] =>  
            [14] => Check
            [15] =>  
            [16] => 
        )

    [1] => Array
        (
            [0] =>  6666666
            [1] => Miler
            [2] => Christopher
            [3] => Chicago
            [4] => 1000
            [5] => 2011-10-26 00:00:00
            [6] => Check
            [7] => 6406
            [8] => 0
            [9] =>  
            [10] => Check
            [11] =>  
            [12] => 0
            [13] =>  
            [14] => Check
            [15] =>  
            [16] => 
        )

)