我有一个多维数组,子数组由更多值组成,我希望所有子数组只有一个值转换为字符串。如何成功扫描多维数组以获得结果?
下面是现在阵列的一小部分。
[1] => Array
(
[name] => Array
(
[0] => Person's name
)
[organisation] => Array
(
[0] => This is their organisation
[1] => aka something else
)
[address] => Array
(
[0] => The street name
[1] => The town name
)
[e-mail] => Array
(
[0] => test@this.site.com
)
)
这就是我希望它最终结束的方式
[1] => Array
(
[name] => Person's name
[organisation] => Array
(
[0] => This is their organisation
[1] => aka something else
)
[address] => Array
(
[0] => The street name
[1] => The town name
)
[e-mail] => test@this.site.com
)
答案 0 :(得分:1)
这应该可以解决问题。
function array2string(&$v){
if(is_array($v) && count($v)==1){
$v = $v[0];
}
}
array_walk($array, 'array2string');
或者作为一个单行,因为我很疯狂。
array_walk($array, create_function('&$v', 'if(is_array($v) && count($v)==1){$v = $v[0];}'));
编辑:看起来该数组是更大数组中的元素。你需要把这个函数放在foreach循环中。
function array2string(&$v){
if(is_array($v) && count($v)==1){
$v = $v[0];
}
}
foreach($array as &$val){
array_walk($val, 'array2string');
}
或使用我疯狂的create_function
单行。
foreach($array as &$val){
array_walk($val, create_function('&$v', 'if(is_array($v) && count($v)==1){$v = $v[0];}'));
}
答案 1 :(得分:0)
无论数组有多深,这都应该有效。
将此功能放入您的代码中:
function array2string(&$v){
if(is_array($v)){
if(count($v, COUNT_RECURSIVE) == 1){
$v = $v[0];
return;
}
array_walk($v, 'array2string');
}
}
然后这样做:
array_walk($array, 'array2string');
答案 2 :(得分:0)
这个PHP 5.3代码使用了一个闭包。如果需要,您也可以使用命名函数。它专门检查字符串,并为嵌套数组调用自身。
<?php
array_walk($array, $walker = function (&$value, $key) use (&$walker) {
if (is_array($value)) {
if (count($value) === 1 && is_string($value[0])) {
$value = $value[0];
} else {
array_walk($value, $walker);
}
}
});