Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php foreach按引用传递意外更改_Php_Arrays_Reference_Foreach - Fatal编程技术网

php foreach按引用传递意外更改

php foreach按引用传递意外更改,php,arrays,reference,foreach,Php,Arrays,Reference,Foreach,我对一个非常奇怪的问题着迷了 这是我的消息来源: function load_search_value($meta_query_array) { var_dump($meta_query_array); foreach($meta_query_array as &$query) { // change compare operator to BETWEEN $query['compare'] = 'BETWEEN'; }

我对一个非常奇怪的问题着迷了

这是我的消息来源:

function load_search_value($meta_query_array) {

    var_dump($meta_query_array);

    foreach($meta_query_array as &$query) {
        // change compare operator to BETWEEN
        $query['compare'] = 'BETWEEN';
    }

    var_dump($meta_query_array);

    return $meta_query_array;
}
这是上述代码对
var\u dump()
的两个调用的输出:

有人知道我错过了什么吗

在给定的源代码中,到底是什么导致关系运算符从
更改为
BND
?我是否以错误的方式使用引用运算符导致意外行为?

您应该更改

foreach($meta_query_array as &$query) {
    // change compare operator to BETWEEN
    $query['compare'] = 'BETWEEN';
}

这是因为在第一次迭代中,
$k=='relation'
$query=='and'
,在这种情况下,
$query['compare']
转换为
$query[0]
,结果是更改字符串中的字母而不是数组中的值。

您应该更改

foreach($meta_query_array as &$query) {
    // change compare operator to BETWEEN
    $query['compare'] = 'BETWEEN';
}


这是因为对于第一次迭代,
$k=='relation'
$query=='and'
,在这种情况下,
$query['compare']
转换为
$query[0]
结果是您正在更改字符串中的字母而不是数组中的值。

foreach的第一次迭代返回$query,引用第一个数组元素(
关系),您在其中将
['compare']
值设置为'BETWEEN'。。。。由于“compare”元素不存在,但我们有一个可以通过字符寻址的字符串,因此我们采用了松散的键入规则,“compare”==0,因此第0个字符被更改为“B”

foreach的第一次迭代返回$query,该查询引用了第一个数组元素(
关系
),您可以在其中设置
['compare']
将值设置为“介于之间”。。。。由于'compare'元素不存在,但我们有一个可以通过字符寻址的字符串,因此我们采用了松散的键入规则,'compare'==0,因此第0个字符被更改为'B'

为什么要使用引用…?
&$query
?是否有任何名为“BND”的值任何地方?为什么要使用引用..???
和$query
?在任何地方有名为“BND”的值吗?谢谢。我完全忘记了,您也可以使用数组语法访问字符串。。。有时候你就是看不到显而易见的东西。:-)@s1lv3r很高兴我能帮上忙=)请随意接受答案,因为它帮助了你!非常感谢。我完全忘记了,您也可以使用数组语法访问字符串。。。有时候你就是看不到显而易见的东西。:-)@s1lv3r很高兴我能帮上忙=)请随意接受答案,因为它帮助了你!是的,就是这样,我也注意到了。是的,就是这样,我也注意到了。