2011-10-13 63 views
0

我有一個奇怪的現象。我希望有人能向我解釋發生了什麼事情: 我想創建一個過濾器。起源類似於'-10'或'10 -20'或'20 +'(類型字符串),結果應該是'低於$ 10',...以及'product_price < 10',... for一個sql命令。PHP通過引用問題 - 不能改變類型?

但將數組存儲回原始字符串不起作用。它只是提供'$ 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:我不是在尋找一個解決方案,因爲我可以改變原產地串入陣,我也可以更改foreachpass by value並創建像$ newFilter陣列的新數組[] = ...我只是好奇

回答

3

您可以更改它的類型。證明施工:

<?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 
     ) 

) 
+0

謝謝!以下邏輯中的錯誤(未複製)導致此問題。它現在工作正常。 – Andreas

1

你應該做

改變你的foreach成

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

和更新您的過濾器

我相信由foreach()語句創建的$ filter變量是數組中的數據的副本,而不是對它的引用。

+0

對不起,我犯了一個錯字。因爲它是通過引用傳遞的,所以它當然是'foreach($ filters as&$ filter)'。 – Andreas