为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
收到一只叮咚 2024-01-19 17:14:20
我有一个来自邮政编码数据库项目的邮政编码数据库,该数据库以 .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那样获得。感谢大家!
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

要通过数组项目的属性找出数组的索引,请使用Array_column仅获取该列/属性的值,然后使用Array_search查找索引。


<?php

$inputZip = 35004;


$index = array_search($inputZip, array_column($zipCodes, 'zipcode')); // 0


print_r($zipCodes[$index]); // the entire object

https://3v4l.org/TAXQq


查看完整回答
反对 回复 2024-01-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

要获取由于必须使用的某些参数而过滤的数组的键,您可以array_keys使用array_filter。


例如


$array = [1,2,1,1,1,2,2,1,2,1];


$out = array_filter($array,function($v) {

    return $v == 2;

});

print_r(array_keys($out));

输出


Array

(

    [0] => 1

    [1] => 5

    [2] => 6

    [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) {

    return $v->zipcode == $inputZip; // for the below output $inputZip=35004 

});

print_r(array_keys($out));

输出


Array

(

    [0] => 0

    [1] => 1

)

在PHP沙箱中尝试示例



查看完整回答
反对 回复 2024-01-19
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

根据您的代码:


foreach ($zipCodes as $index => $location) { // index is a key

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

        echo "Index is ".$index;

        break;

    }

}

var_dump($zipCodes[$index]);

我应该注意,看来您在做错了什么,因为您不想像这样存储数据并一直循环循环。


查看完整回答
反对 回复 2024-01-19
  • 3 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信