Я хочу превратить мои зацикленные данные в один плоский массив без ассоциативных ключей. Я решил это с помощью своего кода, но я думаю, что он такой многолюдный и непростой.
Это мой код:
$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 ответ
шесть унций, новорожденный Иисус, пожалуйста, никогда не оперируйте струну 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()
это и двигаться дальше.