将只有一个值的子数组转换为字符串
问题描述:
我有一个多维数组,子数组由更多的值组成,我希望所有只有一个值的子数组被转换为一个字符串。如何成功扫描多维数组以获得结果?将只有一个值的子数组转换为字符串
下面是数组的一小部分,因为它是现在。
[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] => [email protected]
)
)
,这里是我怎么想它最终
[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] => [email protected]
)
答
无论数组有多深,这都应该可以工作。
将这个功能在你的代码:
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');
答
这应该做的伎俩。
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];}'));
EDIT:它看起来像该阵列是在一个更大的阵列的元件。你需要把这个函数放在一个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];}'));
}
答
此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);
}
}
});
非常感谢火箭!完美地工作! – Paul 2010-08-30 17:59:58