2011-05-27 51 views
0

我知道這可能是一個非常簡單的問題,但我已經環顧四周,大多數答案都與陣列相交有關,這不是我所期待的。如何使用PHP創建現有數組的子部分?

實施例:

我有一個數組($行)。當運行print_r($rows)我得到:

Array (
    [0] => Array (
    [id] => 184 
    [0] => 184 
    [name] => Advantage Membership 
    [1] => Advantage Membership 
    [flag] => 4 
    [2] => 4 
) 
    [1] => Array (
    [id] => 238 
    [0] => 238 
    [programname] => Package 2 
    [1] => Package 2 
    [flag] => 5 
    [2] => 5 
) 
) 

我想基本上是創建一個「子」數組,它包含在我的$行陣列所有的「標誌」字段,這樣我就可以做,如果(in_array())聲明與另一個值。

理想的結果陣列看起來像:

$array2 = array('4', '5') 

然後,我可以運行下面,快樂生活:

if (in_array(4, $array2)) ... 

有什麼建議?

+0

環路的陣列上方和提取值或使用'array_map'。 – 2011-05-27 14:22:24

回答

2

自定義函數有什麼問題?

function in_sub_array($needle, $ary){ 
    foreach ($ary as $a){ 
    if (isset($a['flag']) && $a['flag'] == $needle) // could use ===, too. 
     return true; 
    } 
    return false; 
} 

if (in_sub_arry(4,$array2)) ... 

或者,正如其他人所說,array_map是一個很好的選擇。

function get_flags($ary){ 
    return (isset($ary['flag']) ? $ary['flag'] : null); 
} 

if (in_array(4,array_map('get_flags',$array2))) ... 

demos of both methods

+0

=這是一個很好的功能,但總的來說,我認爲Chris的建議更加簡潔。 – 2011-05-27 14:29:15

+0

剛剛注意到你的第二個建議 - 第三個建議也很好 – 2011-05-27 14:29:36

1
function flagit($n) 
{ 
    return $n['flag']; 
} 

$flags = array_map("flagit", $array); 
+0

感謝您的好建議Chris – 2011-05-27 14:43:30

相關問題