php - 关联数组搜索太慢了

时间:2017-04-11 09:37:29

标签: php mysql arrays

我的应用程序的逻辑是在每个API请求中从数据库中获取所有数据。原因是数据库中存储的数据格式。

这就是我将数据存储到关联数组中的方法,它完全正常。

sendMessage

共有505条记录进入数组。对于GET请求,if(mysqli_num_rows($resultAllBookings) > 0){ while($row = mysqli_fetch_assoc($resultAllBookings)){ if(preg_match($bamsFormatRegex, $row['booking_name'])){ $piecesOfBams = explode('/', $row['booking_name']); $pdgName = strtoupper($piecesOfBams[0]); $teamName = strtoupper($piecesOfBams[3]); $deploymentNumber = $piecesOfBams[1]; #~# if(!array_key_exists($pdgName, $selectBoxArray)){ $selectBoxArray[$pdgName] = Array(); } if(!array_key_exists($teamName, $selectBoxArray[$pdgName])){ $selectBoxArray[$pdgName][$teamName] = Array(); } array_push($selectBoxArray[$pdgName][$teamName], Array( 'name' => $deploymentNumber, 'value' => $deploymentNumber, 'title' => $deploymentNumber, )); #~# array_push($allBookingsData, array( 'booking_name' => $row['booking_name'], 'asset_count' => $row['booking_asset_count'], 'PDG' => $pdgName, 'Deployment_Number' => $deploymentNumber, 'SPoC' => $piecesOfBams[2], 'Team_Name' => $teamName, 'Release' => $piecesOfBams[4] )); }else{ $pdgName = 'INVALID'; $teamName = 'INVALID'; $deploymentNumber = 'INVALID'; #~# if(!array_key_exists($pdgName, $selectBoxArray)){ $selectBoxArray[$pdgName] = Array(); } if(!array_key_exists($teamName, $selectBoxArray[$pdgName])){ $selectBoxArray[$pdgName][$teamName] = Array(); } array_push($selectBoxArray[$pdgName][$teamName], Array( 'name' => $deploymentNumber, 'value' => $deploymentNumber, 'title' => $deploymentNumber, )); array_push($allBookingsData, array( 'booking_name' => $row['booking_name'], 'asset_count' => $row['booking_asset_count'], 'PDG' => 'INVALID', 'Deployment_Number' => 'INVALID', 'SPoC' => 'INVALID', 'Team_Name' => 'INVALID', 'Release' => 'INVALID' )); } } } 数组按原样返回并绑定到页面上的表。工作正常。

现在问题在于当用户在页面上进行选择时使用POST请求。 以下是POST请求中传递的一个此类字段的示例。

allBookingsData

这里我正在搜索具有特定PDG的记录到if($_POST){ $tableData = Array(); foreach ($allBookingsData as $key => $value) { if($value['PDG'] == $filterData['PDG']){ array_push($tableData, Array( 'booking_name' => $value['booking_name'], 'asset_count' => $value['asset_count'], 'PDG' => $value['PDG'], 'Deployment_Number' => $value['Deployment_Number'], 'SPoC' => $value['SPoC'], 'Team_Name' => $value['Team_Name'], 'Release' => $value['Release'] )); } } }else{ $tableData = $allBookingsData; } 数组中。 现在这需要将近12秒的时间来完成请求并将数据绑定到页面。

数组中只有505条记录。我无法弄清楚为什么搜索数组需要花费很多时间。

更新

尝试使用allBookingsData,但响应时间没有变化。完成请求仍需要11-12秒。并且服务器没有超载。

array_filter

function searchByPDG($passedRecord){ error_log('### searchByPDG ###'); global $filterData; return ($passedRecord['PDG'] == $filterData['PDG']); } $tableData = array_filter($allBookingsData, "searchByPDG"); 的示例记录:

allBookingsData

更新-2:

我检查了第一个和第二个代码块的执行时间。它分别是1.0050439834595和1.0006971359253微秒。但返回并绑定数据需要11-12秒。我附上了开发者工具的截图。

enter image description here

如何优化此代码?

0 个答案:

没有答案