Вопрос передачи PHP по ссылке - не можете изменить тип? - PullRequest
0 голосов
/ 13 октября 2011

У меня странное явление. Я надеюсь, что кто-то может объяснить мне, что там происходит: Я хочу создать фильтр. Источник - что-то вроде '-10' или '10 -20 'или '20 +' (строка типа), а результатом должно быть «Менее $ 10», ... а также «product_price <10», ... для команда sql. </p>

Но сохранение массива обратно в исходную строку не работает. В результате получается только массив $ Array. Разве нельзя перейти по ссылке и изменить тип?

Спасибо за ваши знания!

    foreach($filters as &$filter){
        preg_match ('#^\-(\d+)$#ism', $filter, $match);
        if ($match[1]){
            $filter = array(
                'Under $'.intval($match[1]), 
                'product_price < '.intval($match[1])
            );
        }
        ...
    } 
    return $filtering;
}

PS: я не ищу решения, потому что я мог бы изменить исходную строку на массив, или я мог бы изменить foreach на pass by value и создать новый массив с массивами, такими как $ newFilter [] = ... Мне только любопытно

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Вы можете изменить его тип. Доказательство по конструкции:

<?php
header('Content-type:text/plain');

        $arr = array(
                '1',
                '2',
        );

        foreach ($arr as &$filter) {
                $filter = array($filter);
        }

        print_r($arr);
?>

Печать:

Array
(
    [0] => Array
        (
            [0] => 1
        )

    [1] => Array
        (
            [0] => 2
        )

)
1 голос
/ 14 октября 2011

Вы должны изменить ваш foreach на

foreach($filters as $index => $filter)

и обновить свой фильтр, выполнив

$filters[$index] = array(...);

Я считаю, что переменная $ filter, созданная оператором foreach (), является копиейданные в массиве, а не ссылка на него.

...