如何将值添加到通过 AJAX 获得的数组内的数组

How to add values to an array inside an array obtained through AJAX

在我的 PHP 文件中,我收到了总共 4 个变量 $data、$date、$shift 和 $val1。 $data 是一个数组,其他 3 个是日期和 2 个通过 AJAX 获得的字符串没有问题。 我要做的是将这 3 个值插入到我的 $data 变量中。

我尝试使用数组合并,以及具有多个实例的 For each 循环,但到目前为止没有成功。

我这样获得变量:

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;
} 

据我从您的合并输出中可以看出,您的 $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))]]];