比较php中的多维和单维数组

时间:2014-11-11 13:07:49

标签: php arrays multidimensional-array

我刚接触php只是玩一些数组。 我希望从数组中获得不同维度的内容

以下是多维数组

$a = array(
array(
    'productsid' => 90,
    'CouponID' => 50
),
array(
    'productsid' => 80,
    'CouponID' => 95
),
  array(
    'productsid' => 80,
    'CouponID' => 95
));

以下是单维数组:

$b = array(80,90,95);

我想只比较数组的productid索引和单维数组,并希望获取与它相等的数据。

我尝试过以下循环进行打印,但它只提供了productsid的值,但我想要完整的数组。但只能通过比较Productid和第二个数组。

for ($i = 0; $i < 3; $i++) {
foreach ($a[$i] as $key => $value) {
    foreach ($b as $c) {
        if ($value == $c) {
            echo $value .'<br>';

        }
    }
} }

3 个答案:

答案 0 :(得分:1)

看起来你正在寻找in_array()

$result = array();
foreach($a as $item)
    if(in_array($item['productsid'], $b))
        $result []= $item;

或者,以更简洁(但不太可读的IMO)的方式:

$result = array_filter($a, function($item) use($b) {
    return in_array($item['productsid'], $b);
});

对于您的测试数据,这并不重要,但如果您的阵列很大和/或此循环将要运行多次,您可以通过将查找数组转换为哈希表并使用{{{}来实现更好的性能1}}键查找而不是线性数组搜索:

O(1)

答案 1 :(得分:0)

$b = array(80,90,95);
$c = array();
foreach($a as $val) {
    if(in_array($val['productsid'],$b)) {
        $c[] = $val;    
    }
}

echo "<pre>";
print_r($c);

答案 2 :(得分:0)

试试这个:

foreach($a as $ar) {
    if (in_array($ar['productsid'], $b))
        print_r($ar);
}