PHP - 用于查询字符串的多维数组

Par*_*us- 6 php recursion multidimensional-array query-string

搜索了这么久但没有得到任何可行的答案.


A)输入:

$array = array(
            'order_source' => array('google','facebook'), 
            'order_medium' => 'google-text'
          );
Run Code Online (Sandbox Code Playgroud)


看起来像:

Array
(
    [order_source] => Array
        (
            [0] => google
            [1] => facebook
        )

    [order_medium] => google-text
)
Run Code Online (Sandbox Code Playgroud)


B)所需产量:

order_source =谷歌&order_source = Facebook和order_medium =谷歌的文本


C)我尝试过的(http://3v4l.org/b3OYo):

$arr = array('order_source' => array('google','facebook'), 'order_medium' => 'google-text');

function bqs($array, $qs='')
{
    foreach($array as $par => $val)
    {
        if(is_array($val))
        {
            bqs($val, $qs);       
        }
        else
        {
           $qs .= $par.'='.$val.'&';
        }
    }
    return $qs;
}

echo $qss = bqs($arr);
Run Code Online (Sandbox Code Playgroud)


D)我得到了什么:

order_medium =谷歌文本&


注意:它也适用于任何单维数组,如http_build_query()作品.

Dan*_*jel 12

我希望这是你正在寻找的,它适用于单个到n维的数组.

$walk = function( $item, $key, $parent_key = '' ) use ( &$output, &$walk ) {

    is_array( $item ) 
        ? array_walk( $item, $walk, $key ) 
        : $output[] = http_build_query( array( $parent_key ?: $key => $item ) );

};

array_walk( $array, $walk );

echo implode( '&', $output );  // order_source=google&order_source=facebook&order_medium=google-text 
Run Code Online (Sandbox Code Playgroud)