为什么这个PHP函数"忘记"参数?

Iva*_*van 0 php

我已经完成了将数组转换为URL的函数实现.它似乎是正确的,事实上,它在很多情况下都能很好地工作,除非我传递一个值为0的数组值.这是功能:

function strtourl($arr, $entity = true, $prefix = '') {
    $params = array();
    foreach ($arr as $k => $v)
        if ($v) {
            $params[] = is_array($v) ? strtourl($v, $entity, $prefix ? $prefix.'['.$k.']' : $k) :
                        sprintf($prefix ? $prefix.'[%s]' : '%s', urlencode($k)).'='.urlencode($v);
        }
    return implode($entity ? '&' : '&', $params);
}
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的一个例子:

$array = array(
    'type' => 0,
    'content' => array(
        'msg_id'    => 'XSS120',
        'source'    => 0,
        'dest'      => 4,
        'type'      => 0,
        'msg'       => 'message'
    )
);
Run Code Online (Sandbox Code Playgroud)

它返回此字符串:

content[msg_id]=XSS120&content[dest]=4&content[msg]=message
Run Code Online (Sandbox Code Playgroud)

而不是这个:

type=0&content[msg_id]=XSS120&content[source]=0&content[dest]=4&content[type]=0&content[msg]=message
Run Code Online (Sandbox Code Playgroud)

发生了什么以及如何解决?

Nie*_*sol 8

if ($v) {是你的问题.0的计算结果为false,因此它被跳过.

我建议删除它if,这是不需要的.