Сформировать плоский индексированный массив из многомерного набора результатов

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

Это мой код:

$data = array();
while($dt = $this->db->fetchAssoc($res_weight)){
    $data[] = array_values($dt);
}
$datas = json_encode($data);
$datas = str_replace("[","",$datas);
$datas = str_replace("]","",$datas);
$datas="[".$datas.']';
$datas = json_decode($datas);

Как мне написать этот код проще?

1 ответ
1

шесть унций, новорожденный Иисус, пожалуйста, никогда не оперируйте струну json.

Я вижу, что вы пытаетесь превратить свой многомерный индексированный массив индексированных массивов в индексированный массив.

Это намного проще, стабильнее и профессиональнее выполняется в вашем цикле.

Во-первых, если вы не сохраняете имя столбца таблицы в качестве ключа в массиве результатов, не вызывайте fetchAssoc(); используйте метод, который вернет индексированные подмассивы.

если в вашем наборе результатов есть только один столбец, используйте:

$data[] = current($row);

Если только один столбец и вы используете метод выборки, который индексирует значения строк, тогда:

$data[] = $row[0];

Если в вашем наборе результатов есть несколько столбцов, я бы использовал технику push & splat: (замените fetchIndexed() с помощью соответствующего метода из вашего проекта или иным образом вызовите array_values() перед распространением $row)

$data = [];
while ($row = $this->db->fetchIndexed($res_weight)) {
    array_push($data, ...$row);
}

В любом случае ваш результирующий массив будет плоским индексированным массивом, и вы можете json_encode() это и двигаться дальше.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *