Определить 2D массив с петлями в php - PullRequest
2 голосов
/ 10 июня 2010

У меня есть массив $rows, где каждый элемент представляет собой строку из 15 значений, разделенных табуляцией.Я хочу разбить $rows в двумерный массив $rowData, где каждая строка является элементом массива, а каждое значение с разделителями табуляции назначается отдельному элементу массива.Я попробовал эти два метода без успеха.Я знаю, что первая ошибка кодирования, но я не знаю, как ее исправить.Любая помощь будет потрясающей.

for ($i=0; $i<count($rows); $i++){
    for ($j=0; $j<15; $j++){
    $rowData = array([$i] => array (explode("   ", $rows[$j])));
    }  
}  

foreach ($rows as $value){
    $rowData = array( array (explode("  ", $rows[$value])));  
}

Ответы [ 2 ]

5 голосов
/ 10 июня 2010
$rowData = array();
foreach($rows as $value) {
  $rowData[] = explode("\t", $value);
}
2 голосов
/ 10 июня 2010
for ($j=0; $j<15; $j++) {
    $rowData[$j] = explode("\t", $rows[$j]);
}

Для расширения: проблема со следующим кодом:

$rowData = array([$i] => array (explode("   ", $rows[$j])));

в том, что вы, кажется, не знаете, что именно означают написанные вами слова.

Вызов array () возвращает новый массив с указанными элементами. Таким образом, array (explode(" ", $rows[$j])) дает массив с одним элементом, а именно массивом, возвращаемым explode(). И вы заключаете это в другой вызов array(), указывая переменную цикла $i в качестве ключа, соответствующего этому элементу. Кроме того, вы используете символ присваивания =, что означает, что каждый раз, когда вы проходите цикл, $rowData полностью перезаписывается - вы хотели добавить в него новые элементы, не избавляясь от старых.

...