我的数组看起来像这样(有多个子数组)
[
'reportId' => '20210623-da1ece3f'
'creationDate' => '2021-06-23 19:50:15'
'dueDate' => '2021-06-24 19:50:15'
'data' => [
'vehicleDetails' => [
'chassisNumber' => 'xxxxx-xxxxxx'
'make' => 'Honda'
'model' => 'City'
'manufactureDate' => '2000'
'body' => 'xxx-xxxxx'
'engine' => 'xxx-xxx'
'drive' => 'FF'
'transmission' => 'MT'
]
]
我正在尝试将所有键从
chassisNumber
重命名为 chassis_number
。这就是我到目前为止所做的
function changeArrayKeys($array)
{
if(!is_array($array)) return $array;
$tempArray = array();
foreach ($array as $key=>$value){
if(is_array($value)){
$value = changeArrayKeys($value);
}else{
$key = strtolower(trim(preg_replace('/([A-Z])/', '_$1', $key)));
}
$tempArray[$key]=$value;
}
return $tempArray;
}
print_r(changeArrayKeys($data)); die;
这段代码是有效的。它只是不取代子键。就像这里
'data' => [
'vehicleDetails' => [ ]
]
但在内部
vehicleDetails[]
它可以正确更换。知道我在这里缺少什么吗?或者有没有更好、更有效的方法来代替递归?
这对我来说看起来很明显:
if(is_array($value)){
$value = changeArrayKeys($value);
}else{
$key = strtolower(trim(preg_replace('/([A-Z])/', '_$1', $key)));
}
如果
$value
是一个数组,则执行递归调用,但不会以任何方式更改该嵌套数组的键。它可以帮助将 $key
操作移出 else
分支