【问题标题】:how to loop array A , to have all of its values have each of the values in Array B? [duplicate]如何循环数组 A ,使其所有值都具有数组 B 中的每个值? [复制]
【发布时间】:2021-02-07 00:37:02
【问题描述】:

鉴于下面这个例子,

//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']
];

如你所见,Array A 的每个元素都有一个 Array B 的元素

这是我的解决方案

$combined = [];
foreach ($arrayA as $a) {
 for ($i=0; $i < sizeof($arrayB); $i++) {
       $combined[] = [
          $a,
          $arrayB[$i]
        ];
   }
}

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    首先迭代$arrayA,然后在该循​​环内,迭代$arrayB。在$arrayB 的循环中,创建您的$combinedArray 键/值对并推送它:

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

    一个 JS POC:

    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);

    【讨论】:

    • 这不会产生所需的输出?它创建$key=&gt;$value 对并将它们推送到一个数组...输出看起来像$combinedArray = [0 =&gt; ["a"=&gt;"x"], 1 =&gt; ["a"=&gt;"y"], ...] 而不是$combinedArray = [["a", "x"], ["a", "y"]...]
    • @Steven 检查更新的答案,您只需要更改将变量添加到 combinedArray 的方式
    • @Steven 你最初的问题也要求 `['b' => 'y']` 公平
    • 这不是我的问题!但是我没有查看原始问题,现在已经检查过,你是对的,它已被编辑。
    【解决方案2】:

    最直接的选择是再次使用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"]];
    

    【讨论】:

      【解决方案3】:

      这将完成工作:

      $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】:

        这也可以使用 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);
        

        【讨论】:

          猜你喜欢
          • 2015-12-04
          • 1970-01-01
          • 1970-01-01
          • 2019-10-11
          • 2014-02-17
          • 1970-01-01
          • 2019-10-05
          • 2015-10-05
          • 2016-10-28
          相关资源
          最近更新 更多