2017-08-02 24 views
1

我需要走动的jones混合数组和对象。步行通过json混合数组和对象与php

我尝试,却得到了一个[ErrorException]数组字符串转换

$epoJson = json_decode($json, true); 
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($epoJson), RecursiveIteratorIterator::CATCH_GET_CHILD) as $key => $value) { 
    echo 'My node ' . $key . ' with value ' . $value . PHP_EOL; 
} 

注:我不需要echovar_dump或其他,当然...我需要重复的把其他的代码与价值观工作...代码回声它只是为可视化的问题......如果我用echo简单的问题OT的:如果$value,它不是字符串...

尝试搜索一些例子和库关于JSON的混合散步但没有得到任何东西。

http://sandbox.onlinephpfunctions.com/code/4bd4fbc5e43ed439add7d4ba497b830d498ce4ac

回答

1

尝试使用这个代码100%的工作:

注:$value是数组不串

<?php 

$epoJson = json_decode($epoJson, true); 
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($epoJson), RecursiveIteratorIterator::CATCH_GET_CHILD) as $key => $value) { 
    //echo 'My node ' . $key . ' with value ' . $value . PHP_EOL; 
    echo $key.'<br />'; 
    echo "<pre>"; print_r($value); // $value is array not string 
    echo '<hr />'; 
} 

?> 
+0

我不需要的var_dump或打印$值。我要求在数组和对象混合的情况下迭代复杂的json。 – abkrim

0

寻找一个很好的时间后,我意识到出事错误的,因为我试图验证它是否是一个对象。

记住Laravel有一个助手,做或多或少我想要的东西,至少深度

它遍历多维数组有或没有对象,并将其转换成一维数组。

正是我所需要的。

/** 
    * Flatten a multi-dimensional associative array with dots. 
    * 
    * @param array $array 
    * @param string $prepend 
    * @return array 
    */ 
    public static function dot($array, $prepend = '') 
    { 
     $results = []; 

     foreach ($array as $key => $value) { 
      if (is_array($value) && ! empty($value)) { 
       $results = array_merge($results, static::dot($value, $prepend.$key.'.')); 
      } else { 
       $results[$prepend.$key] = $value; 
      } 
     } 

     return $results; 
    } 

http://sandbox.onlinephpfunctions.com/code/c9d8b0c293901325829219f5c03d655748802109