代码之家  ›  专栏  ›  技术社区  ›  sasori

如何循环数组A,使它的所有值都有数组B中的每个值?

php
  •  4
  • sasori  · 技术社区  · 6 年前

    以下面这个例子为例,

    //Array A
    
    $arrayA = [
       'a',
       'b',
       'c'
    ];
    
    //Array B
    
    $arrayB = [
       'x',
       'y',
       'z'
    ];
    

    如果我想要这样的最终组合数组,如何循环这两个数组?

    $combinedArray = [
         ['a','x'],
         ['a','y'],
         ['a','z'],
         ['b','x'],
         ['b','y'],
         ['b','z'],
         ['c','x'],
         ['c','y'],
         ['c','z']
    ];
    

    正如您可以看到上面的输出,数组A的每个元素都有一个数组B的元素

    $combined = [];
    foreach ($arrayA as $a) {
     for ($i=0; $i < sizeof($arrayB); $i++) {
           $combined[] = [
              $a,
              $arrayB[$i]
            ];
       }
    }
    
    3 回复  |  直到 6 年前
        1
  •  0
  •   Steven    6 年前

    最直接的选择就是利用 foreach 第二次。

    $arrayA = ['a','b','c'];
    
    $arrayB = ['x','y','z'];
    
    $combined = []; // Ready for output
    foreach($arrayA as $a){ // Loop through elements in first array
        foreach($arrayB as $b){ // Loop through elements in second array
            $combined[] = [$a, $b]; // Add combination to output array
        }
    }
    
    // OUTPUT
    // $combined = [["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]];
    
        2
  •  1
  •   Metabolic    6 年前

    第一次迭代 $arrayA $arrayB . 在循环的内部 ,创建您的 $combinedArray 键/值对并按下:

    $combinedArray= [];
    foreach($arrayA as $a){
      foreach($arrayB as $b) {
      $combinedArray[] = [$a,$b];
     }
      
    }
    

    const arrayA = [
       'a',
       'b',
       'c'
    ];
    
    //Array B
    
    const arrayB = [
       'x',
       'y',
       'z'
    ];
    
    combinedArray = [];
    
    arrayA.forEach((a)=>{
       arrayB.forEach((b)=>{
         console.log(`["${a}","${b}"]`);
         combinedArray.push([a,b]);
       })
    });
    
       // console.log(combinedArray);
        3
  •  0
  •   Alaa Kaddour    6 年前

    这将完成以下工作:

    $arrayA = [
       'a',
       'b',
       'c'
    ];
    
    //Array B
    
    $arrayB = [
       'x',
       'y',
       'z'
    ];
    $combinedArray = [array()];
    $count =0;
    for($i=0;$i<count($arrayA);$i++){
        for($e=0;$e<count($arrayB);$e++){
            $combinedArray[$count] = [$arrayA[$i],$arrayB[$e]];
            $count++;
        }
    }
    print_r($combinedArray);
    
        4
  •  0
  •   miken32 Amit D    6 年前

    我不知道PHP的内置数组遍历函数是否比 foreach 但我还是喜欢用。

    array_walk($arrayA, function($vA) use(&$combined, $arrayB) {
        array_walk($arrayB, function($vB) use(&$combined, $vA) {
            $combined[]=[$vA, $vB];
        });
    });
    
        5
  •  0
  •   Al-Amin    6 年前

    这也可以使用PHP的标准数组函数来完成。

    $arrayA = [ 'a','b','c' ];
    
    $arrayB = [ 'x','y','z' ];
    
    $combined = [];
    
     foreach ($arrayA as $item ) {
        $temp =  array_map( function ( $a, $b ){
           return [ $a, $b ]; 
        } , array_fill( 0, \count( $arrayB ), $item ) , $arrayB);   
    
        $combined = array_merge( $combined, $temp );
     }
    var_dump($combined);
    
    推荐文章