2011-05-27 60 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