簡體   English   中英

PHP - 需要幫助在循環中創建數組

[英]PHP - Help Needed Creating Array in a Loop

我處理了一些通過 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並為 foreach 循環中的每次迭代添加 $hostname 和 $fileName 變量。 然后我打算在$sessionsArray上做另一個foreach並使用 $hostname 和 $fileName 為數組的每個元素執行一些操作。

我被困在如何將第一個 foreach 循環中的變量添加到$sessionsArray數組中,以便我隨后可以遍歷該數組。

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;
}

你需要得到的最后一個關鍵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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM