展平由json_decode创建的多维数组

时间:2018-04-15 19:14:48

标签: php arrays json

我试图压扁由json_decode()返回的多维数组,但我遇到了问题。我进行了一些研究,但所有解决方案似乎都在跳过我的一些数据。如果我运行此操作并将echo&d;数据与var_dump()进行比较,我绝对不会得到所有内容,而且我不确定原因。

这是我到目前为止所做的:

<?php
function array_flatten($array) { 
    if (!is_array($array)) { 
        return false; 
    }
    $result = array(); 
    foreach ($array as $key => $value) { 
        if (is_array($value)) { 
            $result = array_merge($result, array_flatten($value)); 
        } else { 
            $result[$key] = $value; 
        } 
    } 
    return $result; 
}
for ($x = 1; $x <= 1; $x++) {
    $response = file_get_contents('https://seeclickfix.com/api/v2/issues?page='.$x
                                 .'&per_page=1');
    // Decode the JSON and convert it into an associative array.
    $jsonDecoded = json_decode($response, true);
    $flat = array_flatten($jsonDecoded['issues']);
    foreach($flat as $item) {
        echo $item;
        echo "<br>";
    }
}
?>

1 个答案:

答案 0 :(得分:1)

array_merge将使用相同的密钥覆盖值,如documentation中所示。例如。在您发布的链接中,您将丢失一些网址。您可以通过在展平数组中创建唯一键来解决此问题。例如,通过将前缀传递给您的函数:

function array_flatten($array, $prefix = '') { 
  if (!is_array($array)) { 
    return false; 
  } 
  $result = array(); 
  foreach ($array as $key => $value) { 
    if (is_array($value)) { 
      $result = array_merge($result, array_flatten($value, $prefix.'_'.$key)); 
    } else { 
      $result[$prefix.'_'.$key] = $value; 
    } 
  } 
  return $result; 
}