2017-01-22 133 views
0

我有这个奇怪的问题,我不知道如何标题的问题 - 建议?跳过循环在foreach if语句

无论如何,有一个数组,我正在循环。

<?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或返回'1',出于某种原因,它会为我的数组数组添加1。这意味着我的数组现在将是1,2,3,41。我必须explode()$numbers数组,因为in_array()期望参数二是一个数组,但是,我拥有的是一个逗号分隔的字符串 - 所以它必须首先转换为数组。

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

回答

1

从下面OP's comment

我不需要只是匹配$改编的的ID的,我需要每一个关键是$ ARR了。我只是想根据我的$数字var来提取$ array中的某些数组。

如果你想提取匹配的内阵列$array基础上,$numbers IDS的解决办法是这样的:

$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

+0

我不只是需要匹配'$ arr's'的ID,我需要'$ arr'具有的每个键。我只是想根据我的'$ numbers' var在'$ array'内提取某些数组。 – ProEvilz

+0

我在// id的第一个字段之后放了// etc,因为我正在使用的数组非常大,在本次演示中并不完全需要。对不起,有任何混淆 – ProEvilz

+0

@ProEvilz那么'$ arrayIds'包含'$ array'的所有ID,如果这就是你要找的。 –