PHP-需要帮助在循环中创建数组

PHP-需要帮助在循环中创建数组,php,arrays,Php,Arrays,我处理了一些通过HTTP POST发送到PHP文件的JSON数据。然后我需要提取一些元素并创建一个包含这些元素的PHP数组,这样我就可以在这个数组中循环并执行一些操作 以下是发送的JSON数据的外观示例: [ { "fileName": "Invoices", "event": "processed", "serverName": "server1.acme.com", "timestamp": 1574229999 }, { "fil

我处理了一些通过HTTP POST发送到PHP文件的JSON数据。然后我需要提取一些元素并创建一个包含这些元素的PHP数组,这样我就可以在这个数组中循环并执行一些操作

以下是发送的JSON数据的外观示例:

[
  {
    "fileName": "Invoices", 
    "event": "processed", 
    "serverName": "server1.acme.com", 
    "timestamp": 1574229999
  }, 
  {
    "fileName": "Invoices", 
    "event": "processed", 
    "serverName": "server2.acme.com", 
    "timestamp": 1574228341
  },
  {
    "fileName": "Payments", 
    "event": "processed", 
    "hostname": "server3.acme.com", 
    "timestamp": 1574766997
  }
]
然后我对其进行解码,以解析出我需要的元素:

$payload = @file_get_contents('php://input');
$records= json_decode( $payload, FALSE ); 

$sessionsArray = array();

foreach($records as $record){

        $hostname = $record->hostname;
        $fileName = $record->fileName;
        // need to add these to the $sessionsArray for each iteration of the loop

}
我想为foreach循环中的每个迭代创建一个新数组
$sessionsArray
,并将$hostname和$fileName变量添加到此数组中。然后,我打算在
$sessionarray
上执行另一个
foreach
,并为数组的每个元素使用$hostname和$fileName执行一些操作


我一直在研究如何将第一个foreach循环中的变量添加到
$sessionarray
数组中,这样我就可以随后循环该数组。

在每次
循环之前,需要获取
sessionarray
的最后一个键,并在添加到变量时传递该
最后一个键

$sessionsArray = array();
foreach($records as $key => $record){
        $sessionsArray[$key]['hostname'] = $record->hostname; 
    $sessionsArray[$key]['fileName'] = $record->fileName;
}
下面是一个例子:

$sessionsArray = !empty($sessionsArray)?$sessionsArray:[];
$continueKey = (@array_pop(array_keys($sessionsArray)))?@array_pop(array_keys($sessionsArray))+1:0;
foreach($records as $record){
       $sessionsArray[$continueKey]['hostname'] = $record->hostname;
       $sessionsArray[$continueKey]['fileName'] = $record->fileName;

}
然后你可以做:

foreach($sessionsArray as $entry){
    $hostname = $entry['hostname'];
    $fileName = $entry['fileName'];
}
foreach($sessionsArray as $hostname => $fileName){
//    $hostname contains the hostname
//    $filename contains filename
}
==或===

foreach($records as $record){
    $sessionsArray[$record->hostname] = $record->fileName;
}
然后你可以做:

foreach($sessionsArray as $entry){
    $hostname = $entry['hostname'];
    $fileName = $entry['fileName'];
}
foreach($sessionsArray as $hostname => $fileName){
//    $hostname contains the hostname
//    $filename contains filename
}
仅供参考,根据您提供的JSON对象,您的代码应该是:

$hostname = $record->serverName;
$fileName = $record->fileName;

有一个
]第二个代码块中的代码太多。您还需要在每次迭代中检查对象是否具有
hostname
serverName
,因为对象不同。@MagnusEriksson谢谢,复制/粘贴的困难。我同意检查,但这不是OP问题的一部分,我猜他会在继续时发现?”…但这不是OP问题的一部分”-当然是。OP询问如何从Json数据中提取值。要做到这一点,您需要检查每个对象具有哪些属性(因为我们可以看到它们不一致)。这肯定是答案的一部分。我猜这是一个解释“我一直在研究如何将第一个foreach循环中的变量添加到$SessionArray数组中,这样我就可以随后在该数组中循环。”。。。我个人把它理解为“我被困在如何将变量放入$SessionArray中”而不是“如何从JSON中获取值”。愚蠢的我。在您的循环中,您需要检查对象是否具有
hostname
serverName
,因为对象不一致。这将在json数据中的三个对象中的两个上引发关于“未定义属性'hostname'”的通知。两个具有
serverName
,只有一个具有
hostname