我对一个非常奇怪的问题感到疯狂。
这是我的来源:
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_dump()
两次调用的输出:
有人知道我错过了什么吗?
究竟是什么导致关系运算符在给定的源代码中从AND
更改为BND
?我是否以错误的方式使用引用运算符导致意外行为?
答案 0 :(得分:4)
你应该改变
foreach($meta_query_array as &$query) {
// change compare operator to BETWEEN
$query['compare'] = 'BETWEEN';
}
与
foreach($meta_query_array as $k => &$query) {
if(is_numeric($k)) {
// change compare operator to BETWEEN
$query['compare'] = 'BETWEEN';
}
}
这是因为对于第一次迭代$k == 'relation'
和$query == 'AND'
,在这种情况下$query['compare']
会转换为$query[0]
,结果就是您要更改字符串中的字母而不是数组中的值。
答案 1 :(得分:4)
foreach的第一次迭代返回引用第一个数组元素(relation
)的$ query,其中将['compare']
值设置为'BETWEEN'....因为'compare'元素不存在,但我们有一个可以通过字符处理的字符串,我们进入松散的输入规则,'比较'== 0,所以第0个字符变为'B'