php - вставить массив в массив - проблема с ключом - PullRequest
18 голосов
/ 04 марта 2012

Я пытаюсь поместить несколько массивов в 1 большой массив, в результате чего получается массив 2 lvl.

Я получил этот набор массивов, например:

Array
(
    [cod] => ddd
    [denum] => ffffffffffffffff
    [descr] => ggggggg
    [cant] => 3
)
Array
(
    [cod] => fff
    [denum] => dfgdfgdfgdfgdfg
    [descr] => dfgdfgdfgdfgdfg
    [cant] => 33
)

Но после массиваpush, я получаю этот массив:

Array
(
    [0] => Array
        (
            [0] => ddd
            [1] => ffffffffffffffff
            [2] => ggggggg
            [3] => 3
        )

    [1] => Array
        (
            [0] => fff
            [1] => dfgdfgdfgdfgdfg
            [2] => dfgdfgdfgdfgdfg
            [3] => 33
        )

)

По сути, это то, что я хочу сделать, НО, если вы заметите после нажатия, ключи будут забыты и преобразованы в числовые.

Вот как я хочу, чтобы он выглядел так:

Array
(
    [0] => Array
        (
            [cod] => ddd
            [denum] => ffffffffffffffff
            [descr] => ggggggg
            [cant] => 3
        )

    [1] => Array
        (
            [cod] => fff
            [denum] => dfgdfgdfgdfgdfg
            [descr] => dfgdfgdfgdfgdfg
            [cant] => 33
        )

)

Пример кода, который я использую:

$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
   {
       array_push($res_arr_values, array_values($row));
   }

Может ли кто-нибудь помочь мне с этим?

Ответы [ 6 ]

43 голосов
/ 04 марта 2012

Не используйте array_values на вашем $row

$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
   {
       array_push($res_arr_values, $row);
   }

Кроме того, предпочтительным способом добавления значения в массив является запись $array[] = $value;, не используя array_push

$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
   {
       $res_arr_values[] = $row;
   }

И дальнейшая оптимизация заключается не в вызове mysql_fetch_array($result, MYSQL_ASSOC), а в непосредственном использовании mysql_fetch_assoc($result).

$res_arr_values = array();
while ($row = mysql_fetch_assoc($result))
   {
       $res_arr_values[] = $row;
   }
3 голосов
/ 04 марта 2012

Я думаю, вы должны пойти на

$arrayname[indexname] = $value;
0 голосов
/ 28 ноября 2018

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

Сначала мы устанавливаем массивы:

$arr1 = Array(
"cod" => ddd,
"denum" => ffffffffffffffff,
"descr" => ggggggg,
"cant" => 3
);
$arr2 = Array
(
"cod" => fff,
"denum" => dfgdfgdfgdfgdfg,
"descr" => dfgdfgdfgdfgdfg,
"cant" => 33
);

Затем мы добавляем их в новый массив:

$newArr[] = $arr1;
$newArr[] = $arr2;

Теперь давайте посмотрим наш новый массив со всеми ключами:

print_r($newArr);

Нет необходимости использовать sql или специальные функции для создания нового многомерного массива .... не используйте танк, чтобы добраться туда, куда вы можете идти.

0 голосов
/ 23 января 2017

сначала преобразуйте ваш массив тоже JSON

while($query->fetch()){
   $col[] = json_encode($row,JSON_UNESCAPED_UNICODE);
}

затем верните его обратно в массив

foreach($col as &$array){
   $array = json_decode($array,true);
}

удачи

0 голосов
/ 11 марта 2013
$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $res_arr_values[] = $row;
}


array_push == $res_arr_values[] = $row;

example 

<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
    [3] => raspberry
)
?>
0 голосов
/ 04 марта 2012

Используйте это ..

$res_arr_values = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $res_arr_values[] = $row;
}
...