Как добавить значения в массив внутри массива, полученного через AJAX - PullRequest
1 голос
/ 18 апреля 2019

В моем PHP-файле я получаю всего 4 переменные $ data, $ date, $ shift и $ val1.$ data - это массив, а остальные 3 - это дата и две строки, полученные через AJAX без проблем.Я пытаюсь вставить эти 3 значения в мою переменную $ data.

Я попытался использовать слияние массивов и цикл For для каждого с несколькими экземплярами, но пока безуспешно.

Я получил свои переменные следующим образом:

if (isset($_POST['date'])){
    $date = $_POST['date'];
    $date = json_encode($date);
    $date = json_decode($date);
}

if (isset($_POST['shift'])){
    $shift = $_POST['shift'];
    $shift = json_encode($shift);
    $shift = json_decode($shift);
}

if (isset($_POST['val1'])){
    $val1 = $_POST['val1'];
    $val1 = json_encode($val1);
    $val1 = json_decode($val1);
}

if (isset($_POST['data'])){
    $dat = $_POST['data'];
    $data = json_decode($dat, true);
}

$values = array($date,$shift,$val1);

$r = (array_merge($data, $values)); 

Мой массив данных выглядит примерно так:

Array (
    [0] => Array ( 
        [data] => Array ( 
            [0] => Array (
                [0] => 1
                [1] => 2
                [2] => 3 
                [3] => 0 
                [4] => Mat1 
                [5] => Box1 
                [6] => 100 
                [7] => 100 
                [8] => Piece1
                [9] => Loc1 
                [10] => Mach1 
                [11] => 1000
                [12] => Accepted 
                )  
            ) 
        ) 
    [1] => 2019-04-09 
    [2] => First
    [3] =>  Value1
)

Но я хочу добиться этого:

Array (
    [0] => Array ( 
        [data] => Array ( 
            [0] => Array (
                [0] => 1
                [1] => 2
                [2] => 3 
                [3] => 0 
                [4] => Mat1 
                [5] => Box1 
                [6] => 100 
                [7] => 100 
                [8] => Piece 1
                [9] => Suc1 
                [10] => Mach1 
                [11] => 1000
                [12] => Accepted
                [13] => 2019-04-09 
                [14] => First
                [15] => Value1
                )  
            ) 
        ) 
    )

Что я делаю не так?Или Как мне добиться того, что я пытаюсь сделать?

Редактировать: Поскольку я могу получить более одного массива в своем массиве, что-то вроде этого

Array (
    [0] => Array ( 
        [data] => Array ( 
            [0] => Array (...)
            [1] => Array (...)
            [2] => Array (...)
            [3] => Array (...)  
            ) 
        ) 
    )

Я только что добавил этот кодна @HelgeB ответ, я оставляю это здесь на случай, если кому-то это понадобится в будущем.

$count = count($data[0]['data']);

for ($i=0; $i < $count ; $i++) { 
  $data[0]['data'][$i][] = $date;
  $data[0]['data'][$i][] = $shift;
  $data[0]['data'][$i][] = $val1;
} 

1 Ответ

2 голосов
/ 18 апреля 2019

Насколько я вижу из вашего объединенного вывода, ваша $data структура массива равна $data[0]['data'][0] = [1,2,3,...,'Accepted']. Поэтому, на мой взгляд, вам нужно вставить значения точно на уровне $data[0]['data'][0], чтобы получить свой результат.

Самый простой способ добиться этого:

$data[0]['data'][0][] = $date;
$data[0]['data'][0][] = $shift;
$data[0]['data'][0][] = $val1;

Если вы хотите использовать подход слияния, вам нужно объединиться на правильном уровне, например:

$r = [0 => ['data' => [0 => (array_merge($data[0]['data'][0], $values))]]]; 
...