首页 > 解决方案 > 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

解决方案


首先定义区域的默认纬度和经度数组。

<?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 添加&符号以更新原始数组)


推荐阅读