【问题标题】:how to check the required data in this php array如何检查此 php 数组中所需的数据
【发布时间】:2021-12-06 21:13:00
【问题描述】:

我有以下格式的回复。我正在使用laravel。 尽管有index,但我想检查是否存在street_number,如果是,只需打印long_name 类似我想检查这个数组的types 中是否有route。如果是,则打印路线long_name 等等。

dd($dataArray); 给出此响应

array:3 [
  "html_attributions" => []
  "result" => array:15 [
    "address_components" => array:7 [
      0 => array:3 [
        "long_name" => "19"
        "short_name" => "19"
        "types" => array:1 [
          0 => "street_number"
        ]
      ]
      1 => array:3 [
        "long_name" => "Becket Street South"
        "short_name" => "Becket St S"
        "types" => array:1 [
          0 => "route"
        ]
      ]
      2 => array:3 [
        "long_name" => "senroy"
        "short_name" => "Slenroy"
        "types" => array:2 [
          0 => "locality"
          1 => "political"
        ]
      ]
]

我是这样循环的

$newArray=[];
foreach($dataArray['result'] as $data){
//    check if street_number in array or not if yes push it value to new array
//same for other types as well

}

【问题讨论】:

  • 只需通过in_array检查types内部,这样您就不需要使用硬编码索引,它只会检查street_address是否存在
  • i did this if (in_array('street_number', $data[$key]['types'])){ // 它给出了错误“未定义的索引:类型” }
  • 但是如果 (in_array('street_number', $data[0]['types'])) 这很好。但我不想硬编码

标签: php arrays laravel


【解决方案1】:

你的 foreach 内部有问题: 应该是这样的:

foreach($dataArray as $key=> $data){
    if (in_array('street_number',$data['types'])) {
        
    }
}

因为您的类型已经在 foreach 内的 $data 中。所以你不用再说 $key 了。

编辑 1: 发现了问题。删除isset($data[$key]),因为它总是错误的。因为 $key 返回 0,1,.... 但是 $data 键是这三个: 'long_name' , 'short_name' , 'types' 。您可以通过dd($key)查看

编辑 2: 在您最近更新问题后,您的 foreach 应该是这样的:

foreach($dataArray['result']['address_components'] as $data){
    if (in_array('street_number',$data['types'])) {
        dd('should be here');
    }
}

【讨论】:

  • 不工作: if (isset($data[$key]) && in_array('street_number',$data['types'])) { dd('yes'); }我没有得到肯定的答案,这意味着它被跳过了
  • 在答案@David 中发现并更新了问题
  • 消息:“未定义的索引:类型”出错
  • 在循环中分享var_nump($data)
  • 老实说,只要您执行dd($variableGivingWarning),您应该能够弄清楚要使用哪些数组键。您的顶级循环应该以$dataArray['result']['address_components'] 开头,而不是$dataArray['result']
【解决方案2】:

希望对你有帮助

foreach ($data['result']['address_components'] as $val) {
    if(\Illuminate\Support\Arr::has($val, 'types') && in_array('street_number', $val['types'])) {
        echo "For Street Nu.";
    }else if(\Illuminate\Support\Arr::has($val, 'types') && in_array('route', $val['types'])) {
        echo "For Route";
    }
}

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多