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

时间:2019-04-17 21:19:52

标签: php json multidimensional-array array-merge

在我的PHP文件中,我总共收到4个变量$ data,$ date,$ shift和$ val1。 $ data是一个数组,另外3个是日期和2个通过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 个答案:

答案 0 :(得分:2)

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