PHP如何将关联的数组(而不是其值)推送到另一个数组?

时间:2018-12-14 08:57:29

标签: php arrays

问题如下: 我正在遍历一些包含带有foreach循环的工作站预留数据的数据。 在此循环中,我正在创建一个如下所示的关联数组:

  $test = [
       "id"        => $id,
       "name"      => $forename." ".$surname,
       "startDate" => date("Y-m-d", strtotime($startDate)-86400),
       "endDate"   => date("Y-m-d", strtotime($endDate)),
       "color"     => $color,
  ];

然后应将此数组插入数字数组(也可以是关联数组,但数字会更容易)。 我尝试了array_merge,但似乎它试图将键及其值插入目标数组。这就带来了一个问题,因为密钥在每次迭代期间总是相同的。因此,在每次迭代期间,旧键和值都将被覆盖。此外,无论如何我绝对需要这些数组来保留数组,这将使我的生活更加轻松。

我尝试了array_push,但是这似乎不起作用,我得到了NULL响应。 然后我尝试了array_merge_recursively,在这里数据至少被保留了,但是它被拆分成由前一个关联键索引的数字数组,并用数字键引用内部的数据。这也不是期望的结果。

那么我该如何获得这个结果:

$numericalArray = [[associativeArray1], [associativeArray2], [associativeArray3]]; //and so on

要进一步了解我的方法及其所引起的问题,以下是包含foreach循环的函数。注释的代码包含我已经尝试但没有成功的方法:

function createCalendarMarkupWithoutActiveDauerreservierung($connection, $allReservierungenData){

  $calendarData = [];
  //$calendarData = ["1"];
  foreach($allReservierungenData as $reservierungData){

        $color = setColorForDaterange($reservierungData['status']);
        $username = retrieveReservierungUser($connection, $reservierungData["benutzer"]);
        //$calendarData .= finalizeMarkupWithoutActiveDauerreservierung($reservierungData["id"], $username["vorname"], $username["name"], $reservierungData["anfang"], $reservierungData["ende"], $color);
        $calendarDataSegment = finalizeMarkupWithoutActiveDauerreservierung($reservierungData["id"], $username["vorname"], $username["name"], $reservierungData["anfang"], $reservierungData["ende"], $color);
        //$calendarData = array_merge($calendarData, ["2"]);
        //$calendarData = array_merge($calendarData, $calendarDataSegment);
        //$calendarData = array_push($calendarData, $calendarDataSegment);
        //$calendarData = $calendarData + $calendarDataSegment;//array_merge($calendarData, $calendarDataSegment);
        $calendarData = array_merge_recursive($calendarData, $calendarDataSegment);
  }

  return $calendarData;
}

2 个答案:

答案 0 :(得分:1)

只需将每个数组附加到结果中即可:

<?php

$one = [
    'id' => 'one',
    'num' => 1
];
$result[] = $one;
$two = [
    'id' => 'two',
    'num' => 2
];
$result[] = $two;

var_export($result);

输出:

array (
    0 => 
    array (
    'id' => 'one',
    'num' => 1,
    ),
    1 => 
    array (
    'id' => 'two',
    'num' => 2,
    ),
)

答案 1 :(得分:0)

如果我对你的理解正确,你会想要这样的东西吗?

<?php
// example code
function createCalendarMarkupWithoutActiveDauerreservierung($connection, $allReservierungenData){

  $calendarData = [];

  foreach($allReservierungenData as $reservierungData){

        $calendarDataSegment = finalizeMarkupWithoutActiveDauerreservierung($reservierungData["id"], $username["vorname"], $username["name"], $reservierungData["anfang"], $reservierungData["ende"], $color);
        $calendarData = $calendarData[$reservierungData["id"]] = $calendarDataSegment);

  }

  return $calendarData;
}