Php 将键从值拆分到另一个数组中
我有一个将Php 将键从值拆分到另一个数组中,php,arrays,Php,Arrays,我有一个将.json文件转换为数组的函数: function jsonToArray($file) { $json = json_decode(file_get_contents($file), true); print_r($json); } 这将产生如下数组: Array ( [field1] => value1 [field2] => Array ( [subfield1] => subvalue1 [subfie
.json
文件转换为数组的函数:
function jsonToArray($file) {
$json = json_decode(file_get_contents($file), true);
print_r($json); }
这将产生如下数组:
Array (
[field1] => value1
[field2] => Array
(
[subfield1] => subvalue1
[subfield2] => subvalue2
[subfield3] => subvalue3
)
)
Array (
[0] => Array
(
[0] => field1
[1] => Array
(
[0] => subfield1
[1] => subfield2
[2] => subfield3
)
)
[1] => Array
(
[0] => value1
[1] => Array
(
[0] => subvalue1
[1] => subvalue2
[2] => subvalue3
)
)
)
为了与现有代码接口,我需要这些字段和值拆分的数组,如下所示:
Array (
[field1] => value1
[field2] => Array
(
[subfield1] => subvalue1
[subfield2] => subvalue2
[subfield3] => subvalue3
)
)
Array (
[0] => Array
(
[0] => field1
[1] => Array
(
[0] => subfield1
[1] => subfield2
[2] => subfield3
)
)
[1] => Array
(
[0] => value1
[1] => Array
(
[0] => subvalue1
[1] => subvalue2
[2] => subvalue3
)
)
)
如果这个结构在所有情况下都得到维护,那么我提出的代码就可以工作,但由于这不能保证,我需要另一个解决方案。我确信这是一件相对简单的事情,我就是无法破解。任何提示或见解都将不胜感激。这可能对您有用:这一点和一点foreach将起到神奇的作用。试试这段代码
$arr = array ('field1' => 'value1',
'field2' => array(
'subfield1' => 'subvalue1',
'subfield2' => 'subvalue2',
'subfield3' => 'subvalue3'));
function array_values_recursive($ary) {
$lst = array();
foreach( $ary as $k => $v ) {
if (is_scalar($v)) {
$lst[] = $v;
} elseif (is_array($v)) {
$lst[] = array_values_recursive($v);
}
}
return array_values($lst);
}
function array_keys_recursive($ary) {
$lst = array();
foreach( $ary as $k => $v ) {
if (is_scalar($v)) {
$lst[] = ($k);
} elseif (is_array($v)) {
$lst[] = array_keys_recursive($v);
}
}
return $lst;
}
echo '<pre>';
$arr1 = array();
$arr1[] = array_values_recursive($arr);
$arr1[] = array_keys_recursive($arr);
print_r($arr1);
$arr=array('field1'=>'value1',
“field2”=>数组(
'子字段1'=>'子值1',
'subfield2'=>'subvalue2',
‘subfield3’=>‘subvalue3’);
函数数组\值\递归($ary){
$lst=array();
外汇($k=>v美元){
if(是_标量($v)){
$lst[]=$v;
}elseif(is_数组($v)){
$lst[]=数组值递归($v);
}
}
返回数组_值($lst);
}
函数数组\u键\u递归($ary){
$lst=array();
外汇($k=>v美元){
if(是_标量($v)){
$lst[]=($k);
}elseif(is_数组($v)){
$lst[]=array_keys_recursive($v);
}
}
返回$lst;
}
回声';
$arr1=数组();
$arr1[]=数组\u值\u递归($arr);
$arr1[]=数组\u键\u递归($arr);
印刷费($arr1);