通过递归函数将数组混合到字符串

时间:2011-08-26 01:38:55

标签: php arrays recursion multidimensional-array

当我遍历给定的数组时,它会突然回到开头:

这里以类方法开始:

$where = 'WHERE ';
array_walk( $columns, array( &$this, 'walker_cols' ), $where );

这是回调

function walker_cols( $item, $key, &$where )
{
    static $temp;
    if ( is_array( $item ) )
    {
        $temp = $key;
        array_walk( $item, array( __CLASS__, __FUNCTION__ ), $where );
    }

    var_dump($item);
    var_dump($where);

    return $where .= $temp ? "{$temp} = {$item} AND " : "{$key} = {$item} AND ";
}

给定的数组:

$columns = array(
     'assoc_key_a' => 'assoc_val_a'
    ,'assoc_key_b' => array(
         0 => 'num_val_a'
        ,1 => 'num_val_b' 
     )
);

所需的输出:

WHERE assoc_key_a = assoc_val_a AND assoc_key_b = num_val_a AND assoc_key_b = num_val_b

现在var_dump的结果如下:

input: "assoc_val_a"
output: "WHERE "

input: "num_val_a"
output: "WHERE assoc_key_a = assoc_val_a AND "

input: "num_val_b"
output: "WHERE assoc_key_a = assoc_val_a AND assoc_key_b = num_val_a AND "

input: {
    [0] => "num_val_a"
    [1] => "num_val_b"
}
output: "WHERE assoc_key_a = assoc_val_a     AND "

如果有另一种方法来达到理想的输出,我会很乐意走它。我已经尝试用array_walk_recursive()来做,但是使用该函数我无法获得assoc_key_b,因为它直接跳转到子数组中。

感谢您的帮助。 我很困惑。

1 个答案:

答案 0 :(得分:0)

好的,答案很简单:我在错误的地方传递了参考文献。

呼叫:

$where = 'WHERE ';
array_walk( $columns, array( &$this, 'walker_cols' ), $where );

回调:

function walker_cols( $item, $key, $where )
{
    static $temp;
    if ( is_array( $item ) )
    {
        $temp = $key;
        // reference to $where added here:
        array_walk( $item, array( &$this, __FUNCTION__ ), &$where );
    }

    var_dump($item);
    var_dump($where);

    return $where .= $temp ? "{$temp} = {$item} AND " : "{$key} = {$item} AND ";
}