猿问

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

我处理了一些通过 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


}

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


我被困在如何将第一个 foreach 循环中的变量添加到$sessionsArray数组中,以便随后可以循环遍历该数组。


DIEA
浏览 161回答 3
3回答

慕沐林林

foreach($records as $record){    $sessionsArray[] = [        'hostname' => $record->hostname,        'fileName' => $record->fileName,    ];}然后你可以这样做:foreach($sessionsArray as $entry){    $hostname = $entry['hostname'];    $fileName = $entry['fileName'];}=== 或 ===foreach($records as $record){    $sessionsArray[$record->hostname] = $record->fileName;}然后你可以这样做:foreach($sessionsArray as $hostname => $fileName){//    $hostname contains the hostname//    $filename contains filename}仅供参考,根据您提供的 JSON 对象,您的代码应该是:$hostname = $record->serverName;$fileName = $record->fileName;

墨色风雨

$sessionsArray = array();foreach($records as $key => $record){        $sessionsArray[$key]['hostname'] = $record->hostname;     $sessionsArray[$key]['fileName'] = $record->fileName;}

Cats萌萌

您需要获取sessionsArray每个之前的最后一个键并在添加到变量时loop传递它。last key这是示例:$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;}
随时随地看视频慕课网APP
我要回答