使用if语句在foreach中跳过循环

时间:2017-01-22 20:10:17

标签: php arrays wordpress

我有这个奇怪的问题,我不确定如何标题 - 建议?

无论如何,有一个我正在循环的阵列。

<?php

$array =  array(
   0 => array (
        'id' => '3'
        //etc        
   ),
   1 => array (
        'id' => '4'
        //etc        
   ),
   2 => array (
        'id' => '5'
        //etc        
   ), //etc
);

$numbers = '1,2,3,4';

foreach ($array as $arr) {

  if (! check_array($arr['id'], explode(',', $numbers)) ) {
    continue;
  }

  echo 'My ID is: '.$arr['id'];
  // output should only contain 3 and 4 since the rest didn't match

}

function check_array($id, $numbers) {
    if(in_array($id, $numbers)) {
        return true;
    } 
}

如果$arr['id'] NOT $numbers数组中的值匹配,则跳过当前迭代。

它几乎可以正常工作,因为check_array()返回true或返回&#39; 1&#39;,由于某种原因它会在我的数组中添加1。

这意味着我的数组现在是1,2,3,41。我必须explode() $numbers数组,因为in_array()期望参数2是一个数组,但是,我所拥有的只是一个逗号分隔的字符串 - 所以它必须首先转换为数组。

为什么要将它添加到最后?我基本上只想提取$arr id,如果它$numbers等于RewriteRule中的任何数字。

1 个答案:

答案 0 :(得分:1)

从下面的OP's comment

  

我不需要匹配的$ arr的ID,我需要$ arr拥有的每个键。我只想根据我的$ numbers var。

提取$ array中的某些数组

如果要根据$array ID从$numbers中提取匹配的内部数组,解决方案将如下所示:

$numberIds = explode(',', $numbers);
$resultArr = array();
foreach($array as $arr){
    if(in_array($arr['id'], $numberIds)){
        $resultArr[] = $arr;
    }
}

// display $resultArr array
var_dump($resultArr);

这是live demo