Генерация динамических массивов

У меня есть эта часть кода

$records = array();
$records["data"] = array();
    foreach ($rows as $row) {//select from DB
         $records["data"][] =array();//XXXX
                foreach($this->t_data['columns'] as $column) {//columns for table
                    $records['data'][][]=$row[$column['name']];//THIS need to add into XXXX array 
                }
    }
$records["draw"] = $sEcho;
return json_encode($records);

В try во многих отношениях, чтобы добавить данные в массив. этот код из datatables.

Это wotking код, статический

foreach ($tickete as $row) {
    $records["data"][] = array(
        '<input type="checkbox" name="idticket" value="' . $row['id'] . '">',
        $row['name'],
        $row['type'],
        $row['state']
    );
}

Формат:

{"data":[
["ID1","Name","Type","State"],
["ID2","Name","Type","State"],
["ID3","Name","Type","State"],
["ID4","Name","Type","State"],
["ID5","Name","Type","State"]],"draw":2,"recordsTotal":50,"recordsFiltered":50}

1 ответ

  1. Несколько решений:

    1) временный блок, нажатый в конце:

    foreach ($rows as $row) {
        $subArray = array();
        foreach($this->t_data['columns'] as $column) {
            $subArray[] = $row[$column['name']];
        }
        $records["data"][] = $subArray;
    }
    

    2) использование индекса массива:

    foreach ($rows as $row) {
        $records["data"][] = array();
        foreach($this->t_data['columns'] as $column) {
            $records["data"][count($records["data"]) - 1][] = $row[$column['name']];
        }
    }
    

    3) Ссылка на вновь созданный массив с использованием индекса (полезно только тогда, когда вам нужно обращаться к нему чаще):

    foreach ($rows as $row) {
        $records["data"][] = array();
        $subArray = &$records["data"][count($records["data"] - 1)];
        foreach($this->t_data['columns'] as $column) {
            $subArray[] = $row[$column['name']];
        }
    }