doudiewen9435 2017-02-16 06:27
浏览 62

从数组中的所有索引获取公共值

I have an array like this,

Array
(
  [0] => Array
    (
        [0] => Array
            (
                [productId] => 145
                [variantId] => 179
            )
        [1] => Array
            (
                [productId] => 145
                [variantId] => 180
            )
        [2] => Array
            (
                [productId] => 147
                [variantId] => 181
            )
        [3] => Array
            (
                [productId] => 147
                [variantId] => 182
            )
    )
[1] => Array
    (
        [0] => Array
            (
                [productId] => 147
                [variantId] => 181
            )
        [1] => Array
            (
                [productId] => 147
                [variantId] => 184
            )
    )
[2] => Array
    (
        [0] => Array
            (
                [productId] => 145
                [variantId] => 178
            )
        [1] => Array
            (
                [productId] => 145
                [variantId] => 180
            )
        [2] => Array
            (
                [productId] => 147
                [variantId] => 181
            )
        [3] => Array
            (
                [productId] => 147
                [variantId] => 185
            )
        [4] => Array
            (
                [productId] => 147
                [variantId] => 186
            )
    )
)

For this input we can see that [productId] => 147,[variantId] => 181 is common an all index of array.

Im using foreach to check this. But my code is working fine for 2 index, but not for more than 2 index.

In foreach im taking 0th index and comparing with other index, but not working.

Here is the code i have used so far.

  $first = $name1[0];
    $a = array();
    unset($name1[0]);

    foreach ($name1 as $row) {// foreach main array
        foreach ($first as $row1) {// foreach first index of array array
            foreach ($row as $kkk => $r1) {//foreach index of main array
                // if first array's index's product is is equal to main array index's product id, push values to one array
                if ($row1['productId'] == $r1['productId']) {
                    if (isset($row1['variantId']) && isset($r1['variantId'])) {
                        if ($row1['variantId'] == $r1['variantId']) {
                            $a[] = $r1;
                        }
                    } else {
                         $a[] = $r1;
                    }
                }
            }
        }
    }
  • 写回答

3条回答 默认 最新

  • dsf487787 2017-02-16 06:32
    关注

    First method

    Use this, PHP functions are faster than trying to build your own algorithm.

    $result = array_intersect($array1, $array2);
    

    Second Method

    $array1 = array("5","26","38","42");
    
    $array2 = array("15","36","38","42");
    
    $final_array = array();
    
    foreach($array1 as $key=>$val){
        if(in_array($val,$array2)){
            $final_array[] = $val;
        }
    }
    
    print_r($final_array);
    

    Result: Array ( [0] => 38 [1] => 42 )

    for 2d array

    function multi_intersect($arr) {
       $return = array();
       foreach ($arr as $a) {
           foreach ($arr as $b) {
               if ($a === $b) continue;
               $return = array_merge($return, array_intersect($a, $b));
           }
       }
       return array_unique($return);
    }
    

    you should get

    Array
    (
        [0] => 58
    )
    

    so finally you use this to get result

    $intersect = call_user_func_array('array_intersect', $arr);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)