将只有一个值的子数组转换为字符串

时间:2010-08-25 19:57:15

标签: php multidimensional-array

我有一个多维数组,子数组由更多值组成,我希望所有子数组只有一个值转换为字符串。如何成功扫描多维数组以获得结果?

下面是现在阵列的一小部分。

[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

)

3 个答案:

答案 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);
        }       
    }   
});