2015-12-11 40 views
0

我需要檢查另一個數組中的每一行,如果存在 - 執行一些操作。檢查數組中是否存在(全部在foreach中)

這是我的代碼:

<?php $Sekcje = explode(',', $Detail->SectionsPrefered); ?> 
    <?php foreach ($SectionsList as $SectionOption): ?> 
      <div class="checkbox"> 
      <?php if (in_array($SectionOption->Title , $Sekcje)): ?> 
       * 
      <?php endif ?> 
       <label> 
        <input type="checkbox" value="<?php echo $SectionOption->Title; ?>"> 
        <?php echo $SectionOption->Title; ?> 
       </label> 
      </div> 
    <?php endforeach ?> 

它的只顯示一個 '*',但必須顯示3行(SECTION1,第2節,Section3中)

這裏var_dumps:

$ Sekcje

array(3) { 
    [0]=> 
    string(8) "Section1" 
    [1]=> 
    string(9) " Section2" 
    [2]=> 
    string(9) " Section3" 
} 

$ SectionsList

array(5) { 
    [0]=> 
    object(stdClass)#33 (3) { 
    ["ID"]=> 
    string(1) "1" 
    ["Title"]=> 
    string(8) "Section1" 
    ["Description"]=> 
    string(13) "Opis sekcji 1" 
    } 
    [1]=> 
    object(stdClass)#34 (3) { 
    ["ID"]=> 
    string(1) "2" 
    ["Title"]=> 
    string(8) "Section2" 
    ["Description"]=> 
    string(13) "Opis sekcji 2" 
    } 
    [2]=> 
    object(stdClass)#35 (3) { 
    ["ID"]=> 
    string(1) "3" 
    ["Title"]=> 
    string(8) "Section3" 
    ["Description"]=> 
    string(13) "Opis sekcji 3" 
    } 
    [3]=> 
    object(stdClass)#36 (3) { 
    ["ID"]=> 
    string(1) "4" 
    ["Title"]=> 
    string(8) "Section4" 
    ["Description"]=> 
    string(13) "Opis sekcji 4" 
    } 
    [4]=> 
    object(stdClass)#37 (3) { 
    ["ID"]=> 
    string(1) "5" 
    ["Title"]=> 
    string(8) "Section5" 
    ["Description"]=> 
    string(13) "Opis sekcji 5" 
    } 
} 
+0

'Section2'!='Section2'。看到'9'和'8'? https://eval.in/483901 https://eval.in/483900 – chris85

回答

2

in_array()不準確(ISH)字符串匹配,和你的字符串是不同的。從你自己的轉儲:

string(9) " Section2" 
string(8) "Section2" 

注意,在你的$Sekcje

0

由於MarcB指出,必須在造成explode()你的價值空間的額外空間。除了使用explode()的,使用方法:

preg_split('/\s*,\s*/', $Detail->SectionsPrefered, -1, PREG_SPLIT_NO_EMPTY) 

這將避免圍繞陣列值空白。