2017-01-22 200 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,如果這就是你要找的。 –