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