我有一个像这样的多维数组(请忽略 strlen):
array(2) {
["document"]=>
array(16) {
[0]=>
string(14) "Value1"
[1]=>
string(4) "Value2"
[2]=>
string(30) "Value3"
...
我想为多维数组(文档等)的每个级别上的每个元素(Value1、Value2 等)调用“strtoupper”。
我试过 array_walk_recursive($array, "strtoupper");
但它不起作用。但是为什么,我能做什么?
回答1
function recurse(array $array): array {
$result = [];
foreach ($array as $key => $value) {
$newKey = is_string($key) ? strtoupper($key) : $key;
if (is_array($value)) {
$result[$newKey] = recurse($value);
} elseif (is_string($value)) {
$result[$newKey] = strtoupper($value);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
$array = [
'document' => [
'Value1',
'Value2',
'Value3'
],
'document2' => [
'Value21',
'Value22',
'document2' => [ 'Value221', 222, 'Value223' ],
23
]
];
$result = recurse($array);
print_r($result);
回答2
由于 strtoupper
不会改变原来的 value,而是返回新的 value,你应该这样做:
array_walk_recursive(
$array,
// pass value by reference.
// Changing it will also reflect changes in original array
function (&$value) { $value = strtoupper($value); }
);
此提示也在 https://www.php.net/manual/en/function.array-walk-recursive.php#refsect1-function.array-walk-recursive-parameters 中进行了描述,请参阅关于 callback
参数说明的注释。