检查是否存在于数组中(全部在foreach中)

时间:2015-12-11 20:47:36

标签: php arrays codeigniter 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 ?>

它只显示一个&#39; *&#39;,但必须显示3行(第1节,第2节,第3节)

这里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"
  }
} 

2 个答案:

答案 0 :(得分:2)

in_array()确实(ish)字符串匹配,并且您的字符串不同。来自你自己的转储:

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

请注意$Sekcje

中的额外空格

答案 1 :(得分:0)

正如MarcB指出的那样,您的值中有explode()引起的空格。而不是使用explode(),请使用:

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

这将避免在数组值周围留出空格。