我试图压扁由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>";
}
}
?>
答案 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;
}