【问题标题】:PHP get the position of a array parentPHP获取数组父级的位置
【发布时间】:2014-03-30 16:30:16
【问题描述】:

这里有一个json字符串,需要获取registratition_id的所有父数组位置 例如。我希望最后的数组输出如下内容:

 [0] =>0
 [1] =>1
 [2] =>3

其实我想得到所有包含registration_id的数组位置

$json_raw = '{"multicast_id":6446899316497614986,
                     "success":5,
                     "failure":1,
                     "canonical_ids":3,
                     "results":[
                             {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                               "message_id":"0:1396175384218906%50b5570df9fd7ecd"
                             },
                             {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                              "message_id":"0:1396175384218155%50b5570df9fd7ecd"
                             },
                             {"message_id":"0:1396175384218718%b91f4d1ff9fd7ecd"
                             },
                             {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                              "message_id":"0:1396175384219100%50b5570df9fd7ecd"
                             },
                             {"message_id":"0:1396175384219927%50b5570df9fd7ecd"
                             },
                             {"error":"InvalidRegistration"
                             }]
                       }';

【问题讨论】:

    标签: php json multidimensional-array


    【解决方案1】:

    使用foreach循环并检查registration_id是否isset

    $obj = json_decode($json_raw);
    $resultsWithRegID = array();
    
    foreach($obj->results as $index=>$element){
      if(isset($element->registration_id)){
         $resultsWithRegID[] = $index;
      }
    }
    

    【讨论】:

      【解决方案2】:

      只是一个替代版本:

      $array_raw = json_decode($json_raw, true);
      
      $what = "registration_id";
      
      $res = array_keys(array_filter($array_raw['results'], function($item) use ($what)
      {
          return isset($item[$what]);
      }));
      
      var_dump($res); 
      

      显然你可以:

      • isset($item["registration_id"]) 中定义直接搜索的关键字
      • 如果您需要过滤数组的整个部分,请省略包装函数array_keys

      (全部)

      array (size=3)
          0 => 
              array (size=2)
                  'registration_id' => 'APA91bEgLFvrc0lnXqX3C1euQohdHrv...'
                  'message_id' => ''
          1 => 
              array (size=2)
                  'registration_id' => 'APA91bEgLFvrc0lnXqX3C1euQohdHrv...' 
                  'message_id' => '0:1396175384218155%50b5570df9fd7ecd'
          3 =>
              array (size=2)
                  'registration_id' => 'APA91bEgLFvrc0lnXqX3C1euQohdHrv...'
                  'message_id' => '0:1396175384219100%50b5570df9fd7ecd'
      

      【讨论】:

        【解决方案3】:
        <html>
        <head>
        <title>Online PHP Script Execution</title>
        </head>
        <body>
        <?php
          $json_raw = '{"multicast_id":6446899316497614986,
                             "success":5,
                             "failure":1,
                             "canonical_ids":3,
                             "results":[
                                     {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                                       "message_id":"0:1396175384218906%50b5570df9fd7ecd"
                                     },
                                     {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                                      "message_id":"0:1396175384218155%50b5570df9fd7ecd"
                                     },
                                     {"message_id":"0:1396175384218718%b91f4d1ff9fd7ecd"
                                     },
                                     {"registration_id":"APA91bEgLFvrc0lnXqX3C1euQohdHrv_wbxtGP86ezRzGWEVMQPpJjw1GMhGzfkI8Q34TU1KRts2j_-7CyU4ce6MlX5DB3umpXDGl-Ebmg53b44UKga79ee9Sal6gT_9rP3KIz9pDEUk2JVJsQmxiWXWoIfrYEAmFg",
                                      "message_id":"0:1396175384219100%50b5570df9fd7ecd"
                                     },
                                     {"message_id":"0:1396175384219927%50b5570df9fd7ecd"
                                     },
                                     {"error":"InvalidRegistration"
                                     }]
                               }';
        $data=json_decode ($json_raw);
        $arr= $data->{'results'};
        $i=0;
        $n_r=array();
        foreach($arr as $d)
        {$n_r[]=$arr[$i]->{'registration_id'};
        $i=$i+1;}
        print_r($n_r);
        ?>
        </body>
        </html>
        

        【讨论】:

          【解决方案4】:

          将 JSON 转换为数组 - 剩下的就是你的了:

          $array = json_decode($json_raw, true);
          
          // results with registration_id
          $results = array();
          foreach($array['results'] as $index => $element) {
            if(isset($element['registration_id']) === true) {
               $results[] = $index;
            }
          }
          
          var_dump($results);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-09
            • 2017-01-04
            • 1970-01-01
            • 2017-02-16
            • 2015-07-11
            • 2017-12-15
            • 1970-01-01
            相关资源
            最近更新 更多