无法根据动态字符串创建二维数组

时间:2018-09-27 12:09:11

标签: php arrays string foreach

我试图将动态字符串加载到现有的空数组(以创建数组数组)。动态字符串如下所示(一个,两个或多个数字数组,以逗号分隔)

$str = "[52,18,140,41,56],[54,18,145,43,58]";

并将其加载到其中的空数组

$arr = explode(',', $str);  

print_r($arr);正在打印时,看来我正在将数据加载到数组中

Array ( 
    [0] => [52 
    [1] => 18 
    [2] => 140 
    [3] => 41 
    [4] => 56] 
    [5] => [54 
    [6] => 18 
    [7] => 145 
    [8] => 43 
    [9] => 58] 
)

但是当我尝试通过foreach ($arr as list($a, $b, $c, $d, $e)访问它们时,我什么也没收到

$arr = [];
$str = "[52,18,140,41,56],[54,18,145,43,58]";
$arr = explode(',', $str);

print_r($arr);

echo '<table style="width:40%">';
foreach ($arr as list($a, $b, $c, $d, $e)) {
     echo '<tr>';
     echo '<th>'.$a.'</th>';
     echo '<th>'.$b.'</th>';
     echo '<th>'.$c.'</th>';
     echo '<th>'.$d.'</th>';
     echo '<th>'.$e.'</th>';
     echo '</tr>';  
}
echo '</table>';

为什么会这样,我该如何解决?

2 个答案:

答案 0 :(得分:1)

我认为这就是您想要的:

selectedText

哪个输出:

$str = "[52,18,140,41,56],[54,18,145,43,58]";
$arr = explode('],[', $str);

echo '<table style="width:40%">';
foreach ($arr as $item) {
    $item = trim($item,'[]');
    list($a, $b, $c, $d, $e) = explode(',', $item);
    echo '<tr>';
    echo '<th>'.$a.'</th>';
    echo '<th>'.$b.'</th>';
    echo '<th>'.$c.'</th>';
    echo '<th>'.$d.'</th>';
    echo '<th>'.$e.'</th>';
    echo '</tr>';
}
echo '</table>';

答案 1 :(得分:1)

您可以使用preg_split()代替,它可以通过正则表达式分割字符串。使用[]不会添加到数组中。

$arr = preg_split("/[\[\],]+/", $str);
foreach ($arr as $item){
    if (!empty($item))
        // do something
}

因此您的代码更改为

$str = "[52,18,140,41,56],[54,18,145,43,58]";
$arr = preg_split("/[\[\],]+/", $str);

echo '<table style="width:40%"><tr>';
foreach ($arr as $item){
    if (!empty($item))
        echo "<th>{$item}</th>";
}
echo '</tr></table>';

demo中查看结果