Невозможно создать двумерный массив из динамической строки - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь загрузить динамическую строку в существующий пустой массив (для создания массива массива).Динамическая строка выглядит следующим образом (один, два или более массивов чисел, разделенных запятой)

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

и загрузка ее в пустой массив в

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

Это выглядит как IЯ загружаю данные в массив, поскольку 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 голосов
/ 27 сентября 2018

Вместо этого вы можете использовать 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

0 голосов
/ 27 сентября 2018

Я думаю, это то, что вы ищете:

$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>';

Какие выходы:

<table style="width:40%">
    <tr>
        <th>52</th><th>18</th><th>140</th><th>41</th><th>56</th>
    </tr>
    <tr>
        <th>54</th><th>18</th><th>145</th><th>43</th><th>58</th>
    </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...