1

我有这个数组(在下面的代码中从点 [A] 打印):

Array
(
    [codigo] => 
    [titulo] => Array
        (
            [0] => musi
            [1] => bach
        )
    [titulo_operador] => OR
    [resumo] => 
    [autor] => 
    [ano_min] => 
    [ano_max] => 
    [tipo] => 
    [categoria] => 
    [palavra_chave] => 
    [idioma] => 
)

我在其中执行这些操作...(代码故意未优化,它可能更精简)

if (!empty($data['titulo'])) {
    if (is_array($data['titulo'])) {
        $query .= " AND (";
        //print_r($data); point [A]
        foreach ($data['titulo'] as $value) {
            $query_temp .= " ".$data['titulo_operador']." aid.name LIKE '%".$value."%'";
        }
        //print_r($data); point [B]
        $query_temp = trim($query_temp, " ".$data['titulo_operador']." ");
        $query .= $query_temp;
        unset($query_temp);
        $query .= ")";
    } elseif (is_string($data['titulo'])) {
        $query .= " AND aid.name LIKE '%".$data['titulo']."%'";
    }
}

在 foreach 之后,$data['idioma'] 设置为 'bach'。这是 [B] 点中的 print_r:

Array
(
    [codigo] => 
    [titulo] => Array
        (
            [0] => musi
            [1] => bach
        )
    [titulo_operador] => OR
    [resumo] => 
    [autor] => 
    [ano_min] => 
    [ano_max] => 
    [tipo] => 
    [categoria] => 
    [palavra_chave] => 
    [idioma] => bach
)

我已经删除了 $query_temp 语句,在那里留下了一个空的 foreach 并且这仍然会发生,所以我很确定那里的 foreach 中有一些东西......子数组中的 foreach 是否也改变了父数组中的任何内容?

编辑:我将其他元素分配给 $data['titulo'] 并且 $data['idioma'] 总是获取最后一个元素的值。

4

1 回答 1

1

感谢 Jon Stirling 的提示,在尝试在 eval 上复制问题时找到了解决方案。问题不在该代码块上。这个块在数组创建之后运行,导致了这个问题:

foreach ($data as $key => &$value) {
    $data[$key] = conferir($data[$key]);
}

删除此 foreach 语句中的引用可防止其他 foreach 出现奇怪的行为:

foreach ($data as $key => $value) {
    $data[$key] = conferir($data[$key]);
}

再次感谢 Jon Stirling 将我引向 3v4l。复制我的代码让我发现了问题。

于 2015-05-03T18:23:10.793 回答