猿问

如何在没有键的情况下在php对象中定位数组

我有一个来自邮政编码数据库项目的邮政编码数据库,该数据库以 .csv 文件形式提供。我将其转换为JSON,它没有每个数组的钥匙,它们看起来像这样:


[

    {

      "zipcode": 35004,

      "state abbreviation": "AL",

      "latitude": 33.606379,

      "longitude": -86.50249,

      "city": "Moody",

      "state": "Alabama"

    }

]

我已经弄清楚了如何搜索所有数组并找到匹配的邮政编码,但是我不知道如何使搜索返回数据有关它找到的数组。


我可以这样搜索:


$filename = './assets/data/zips.json';

    $data = file_get_contents($filename);

    $zipCodes = json_decode($data);


    $inputZip = 55555;


    foreach ($zipCodes as $location) {

        if ($inputZip == $location->zipcode) {

            echo "Success";

        }

    }

谁能告诉我如何使用此搜索(或一个更好的想法)将与搜索的邮政编码相关的纬度和经度存储到两个变量上?我几乎整个周末都浪费了这个,所以所有的帮助都非常感谢。


另外,我没有使用RAW CSV文件执行此功能的问题,但我无法像JSON那样获得。


感谢大家!


收到一只叮咚
浏览 110回答 3
3回答

肥皂起泡泡

要通过数组项目的属性找出数组的索引,请使用Array_column仅获取该列/属性的值,然后使用Array_search查找索引。<?php$inputZip = 35004;$index = array_search($inputZip, array_column($zipCodes, 'zipcode')); // 0print_r($zipCodes[$index]); // the entire objecthttps://3v4l.org/TAXQq

鸿蒙传说

要获取由于必须使用的某些参数而过滤的数组的键,您可以array_keys使用array_filter。例如$array = [1,2,1,1,1,2,2,1,2,1];$out = array_filter($array,function($v) {&nbsp; &nbsp; return $v == 2;});print_r(array_keys($out));输出Array(&nbsp; &nbsp; [0] => 1&nbsp; &nbsp; [1] => 5&nbsp; &nbsp; [2] => 6&nbsp; &nbsp; [3] => 8)在PHP沙箱中尝试以上示例匹配您的实际数据结构。$json = '[{"zipcode": 35004,"state abbreviation": "AL","latitude": 33.606379,"longitude": -86.50249,"city": "Moody","state": "Alabama"},{"zipcode": 35004,"state abbreviation": "AL","latitude": 33.606379,"longitude": -86.50249,"city": "Moody","state": "Alabama"},{"zipcode": 35005,"state abbreviation": "AL","latitude": 33.606579,"longitude": -86.50649,"city": "Moody","state": "Alabama"}]';$array = json_decode($json);$out = array_filter($array, function($v) use ($inputZip) {&nbsp; &nbsp; return $v->zipcode == $inputZip; // for the below output $inputZip=35004&nbsp;});print_r(array_keys($out));输出Array(&nbsp; &nbsp; [0] => 0&nbsp; &nbsp; [1] => 1)在PHP沙箱中尝试示例

慕田峪4524236

根据您的代码:foreach ($zipCodes as $index => $location) { // index is a key&nbsp; &nbsp; if ($inputZip == $location->zipcode) {&nbsp; &nbsp; &nbsp; &nbsp; echo "Index is ".$index;&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}var_dump($zipCodes[$index]);我应该注意,看来您在做错了什么,因为您不想像这样存储数据并一直循环循环。
随时随地看视频慕课网APP
我要回答