php - PHP 根据不同的数组元素用预定义的值填充缺失的数组元素
问题描述
我一直在搜索和阅读类似的问题,但没有找到任何类似的东西。
我正在从样本数据的 sql 查询创建一个数组。在该示例数据中有地理坐标和区域定义。问题是 ge 坐标并不总是被填充。但该地区是。所以我想创建一个规则集,为每个区域定义默认地理坐标。然后,如果纬度为 NULL,if 循环将根据区域标识符填充这些坐标。
我没有任何开发代码,因为我什至不确定从哪里开始更改 PHP 数组。如果我指的是下面的数组的方式令人困惑,请原谅我。
PHP
<?php
$host = "555.555.55.55";
$user = "user";
$pass = "password";
$db = 'schema';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_error)
{
echo "Can't connect: $mysqli->errno() $mysqli->error()";
}
$sql = "select * from Sample_Data";
if ($res = $mysqli->query($sql))
{
$rows = array();
while ($row = $res->fetch_assoc())
{
$rows[] = $row;
}
}
print("<pre>".print_r($rows,true)."</pre>");
//echo json_encode($rows, JSON_PRETTY_PRINT);
?>
浏览器
Array
(
[0] => Array
(
[ID] => 1
[File_Name] => b0517
[Sample_Number] => B0517
[Date] => 2017-05-23
[Time] =>
[Lattitude] =>
[Longitude] =>
[Location_Description] => Blank 5/17
[Sample_Type] => Water
[Sample_Type_Description] => Blank
[Classification] => Blank
[Classification_Description] => Sample Blank
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => GoM
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
[1] => Array
(
[ID] => 2
[File_Name] => d1
[Sample_Number] => D1
[Date] => 2017-01-18
[Time] => 11:03:00
[Lattitude] => 30.42357
[Longitude] => -89.07170
[Location_Description] => Rippy
[Sample_Type] => Water
[Sample_Type_Description] => Freshwater
[Classification] => Unknown
[Classification_Description] => Unknown Sample
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => GoM
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
[2] => Array
(
[ID] => 3
[File_Name] => d2
[Sample_Number] => D2
[Date] => 2017-01-18
[Time] => 12:12:00
[Lattitude] =>
[Longitude] =>
[Location_Description] => Ohio
[Sample_Type] => Water
[Sample_Type_Description] => Freshwater
[Classification] => Unknown
[Classification_Description] => Unknown Sample
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => R6
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
And so on for 500 groups...
期望的标准
[Another array?]
[R6] = [Lattitude] => 55.5555
[Longitude] => 55.5555
[GOM]= [Lattitude] => 66.6666
[Longitude] => 66.6666
something like....
foreach [i][Lattitude] in $rows
if [i][Lattitude] == NULL
Then compare [i][Region] to the array above and replace [Lattitude] and [Longitude]
结果
Array
(
[0] => Array
(
[ID] => 1
[File_Name] => b0517
[Sample_Number] => B0517
[Date] => 2017-05-23
[Time] =>
[Lattitude] => 66.6666
[Longitude] => 66.6666
[Location_Description] => Blank 5/17
[Sample_Type] => Water
[Sample_Type_Description] => Blank
[Classification] => Blank
[Classification_Description] => Sample Blank
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => GoM
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
[1] => Array
(
[ID] => 2
[File_Name] => d1
[Sample_Number] => D1
[Date] => 2017-01-18
[Time] => 11:03:00
[Lattitude] => 30.42357
[Longitude] => -89.07170
[Location_Description] => Rippy
[Sample_Type] => Water
[Sample_Type_Description] => Freshwater
[Classification] => Unknown
[Classification_Description] => Unknown Sample
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => GoM
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
[2] => Array
(
[ID] => 3
[File_Name] => d2
[Sample_Number] => D2
[Date] => 2017-01-18
[Time] => 12:12:00
[Lattitude] => 55.5555
[Longitude] => 55.5555
[Location_Description] => Ohio
[Sample_Type] => Water
[Sample_Type_Description] => Freshwater
[Classification] => Unknown
[Classification_Description] => Unknown Sample
[Depth_Taken] => 0
[Volume_Filtered] => 100
[Region] => R6
[Processing_Lab] => UCB
[QC_Code] =>
[QC_Description] =>
[Colilert_Results] =>
)
解决方案
首先定义区域的默认纬度和经度数组。
<?php
$regions = [
'R6' => ['Lattitude' => 55.5555, 'Longitude' => 55.5555],
'GOM' => ['Lattitude' => 66.6666, 'Longitude' => 66.6666],
];
foreach ($rows as &$row){
if (!$row['Lattitude']){
$row['Lattitude'] = $regions[$row['Region']]['Lattitude'];
$row['Longitude'] = $regions[$row['Region']]['Longitude'];
}
}
(编辑为 $row 添加&符号以更新原始数组)
推荐阅读
- c# - System.InvalidOperationException:ItemsControl 与其项目源不一致
- vb.net - 试图从本地 DataTable 中获取 ListBox 所选项目的总和到标签中
- javascript - 我们是否需要使用 async/await 将返回值包装到 Promise 中?
- apache - 使用 .htaccess mod_rewrite 将部分 URL 重写到特定页面
- html - 一个 div 与另一个 div 对接时包装,而不是堆叠在其上
- c# - 无法加载文件或程序集 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一
- go - 在golang中动态创建结构数组
- ruby-on-rails - RSpec Controller 测试屏幕上的文本失败
- graph-databases - 如何在 JanusGraph 中合并两个顶点并删除其中一个。还将删除顶点的边添加到修改的顶点
- javascript - 数据表行中的链接行为与数据表外的链接行为不同