早上好,
我有一个嵌套数组,并且找到了一种打印它的方法。 但是我需要将其转换为更简单的数组,以便最后将其导出为.csv。
1。首先,我的json结果是这样的嵌套数组(实际上有更多的子数组):
["DATA"=>[
0["ID"=>"123456789",
"STORE"=>[0["NAME"=>"my store ","STREET"=>"baker street" ]]],
1["ID"=>"987654321",
"STORE"=>[0["NAME"=>"the last irish pub","STREET"=>"Endov Daworld Street",]]]]]
2。以及Tran Duc Thang先生的函数代码(非常感谢) 我可以打印出来。但是我尝试重新使用他的代码,以创建如下更简单的数组:
Array(
0("ID"=>"123465789","Name"=>"my store",...),
1("ID"=>"987654321","Name"=>"the last irish pub",...))
3。代码:
$dest_array = array();
class Foo {
public static function formatArray($arr){
foreach ($arr as $key=> $value){
if(is_array($value)) {
if(!empty($value)) {
self::formatArray($value);
}
} else {
$dest_array[$key] = $value;
}
}
}
}
Foo::formatArray($json_decoded);
foreach($dest_array as $k => $v) {
echo "$k => $val";
}
var_dum($dest_array)
告诉我数组为空array (size = 0)
我尝试使用array_push
代替$dest_array[$key] = $value
但它也不起作用。
我错过了什么? 请问有什么想法吗?
谢谢
答案 0 :(得分:0)
您不需要递归,只需嵌套循环即可。外层循环处理DATA
数组,内层循环处理STORE
数组。
$dest_array = array();
foreach ($json_decoded['DATA'] as $data) {
$id = $data['ID'];
foreach ($data['STORE'] as $store) {
$store['ID'] = $id;
$dest_array[] = $store;
}
}
答案 1 :(得分:0)
您的函数无法访问变量所在的全局范围。您有2种选择-要么具有全局范围(通常不好)
int *hugeList = malloc(10000000);
for (long i = 0; i < 1000000; ++i)
{
hugeList[i] = (rand() % 100);//random integers from 0 to 99
}
long *subList[8];//to fill each thread's result
#pragma omp parallel
for (long i = 0; i < 1000000; ++i)
{
long n = 0;
if(hugeList[i] < 10)
{
//do something to fill "subList" properly
subList[threadNo][n] = hugeList[i];
n++;
}
}
或作为一种更好的解决方案,以基数组返回您的新结构(然后没有全局依赖性!)
class Foo {
public static function formatArray($arr){
global $dest_array; // <<< makes it available
foreach ($arr as $key=> $value){
if(is_array($value)) {
if(!empty($value)) {
self::formatArray($value);
}
} else {
$dest_array[$key] = $value;
}
}
}
}
答案 2 :(得分:0)
您的代码至少有3个问题:
$value
是一个数组时,请对其进行格式化,但对结果不执行任何操作修改后的代码-它在结果的每一行上调用格式化程序(否则递归函数将合并两个存储):
$json_decoded = [
"DATA" => [
["ID"=>"123456789", "STORE"=> [ ["NAME"=>"my store ", "STREET"=>"baker street"] ] ],
["ID"=>"987654321", "STORE"=> [ ["NAME"=>"the last irish pub", "STREET"=>"Endov Daworld Street"] ] ],
],
];
class Foo {
public static function formatArray($arr){
$dest_array = [];
foreach ($arr as $key=> $value){
if(is_array($value)) {
if(!empty($value)) {
foreach(self::formatArray($value) as $key2=> $value2){
$dest_array[$key2] = $value2;
}
}
} else {
$dest_array[$key] = $value;
}
}
return $dest_array;
}
}
foreach($json_decoded['DATA'] as $k => $v) {
$v = Foo::formatArray($v);
foreach($v as $k2 => $v2) {
echo "$k2 => $v2 <br>";
}
echo "<br>";
}