ホームページ >バックエンド開発 >PHPチュートリアル >複数のアレイに関するディスカッションを結合する
順列と組み合わせ
3 つの配列があると仮定します (実際には配列の数は不明):れーれー れーれー
そうですね。 #1 に問題があります。
$a = [1, 2];$b = ['A', 'B', 'C'];$c = ['a', 'b'];$d = Descartes($a, $b, $c);print_r($d);function Descartes() { $d = func_get_args(); if( count($d) < 2 ) return current($d); $n = array_product( array_map('count', $d) ); array_walk( $d, function(&$v, $k, $n) { $v = array_chunk( call_user_func_array('array_merge', array_pad([$v], $n/count($v), $v)), 1); if($k==0) sort($v); }, $n); array_unshift($d, 'array_merge'); $d = call_user_func_array('array_map', $d); array_multisort(array_map(function($v) { return $v[0]; }, $d), $d); return $d;}
Array( [0] => Array ( [0] => 1 [1] => A [2] => a ) [1] => Array ( [0] => 1 [1] => A [2] => b ) [2] => Array ( [0] => 1 [1] => B [2] => a ) [3] => Array ( [0] => 1 [1] => B [2] => b ) [4] => Array ( [0] => 1 [1] => C [2] => a ) [5] => Array ( [0] => 1 [1] => C [2] => b ) [6] => Array ( [0] => 2 [1] => A [2] => a ) [7] => Array ( [0] => 2 [1] => A [2] => b ) [8] => Array ( [0] => 2 [1] => B [2] => a ) [9] => Array ( [0] => 2 [1] => B [2] => b ) [10] => Array ( [0] => 2 [1] => C [2] => a ) [11] => Array ( [0] => 2 [1] => C [2] => b ))
そうですね、これは正しいです。 #1 に問題があります。
$a = [1, 2];$b = ['A', 'B', 'C'];$c = ['a', 'b'];$d = ['D', 'E', 'F'];$r = Descartes($a, $b, $c);$r = Descartes($a, $b, $c, $d);print_r( array_map(function($v) { return join(',', $v); }, $r) );function Descartes() { $d = func_get_args(); if( count($d) < 2 ) return current($d); $n = array_product( array_map('count', $d) ); array_walk( $d, function(&$v, $k, $n) { $v = array_chunk( call_user_func_array('array_merge', array_pad([$v], $n/count($v), $v)), 1); }, $n); foreach($d as $i=>$t) { if($i == 0) { $r = $t; }else { array_multisort(array_map(function($v) { return $v[0]; }, $r), $r); $r = array_map('array_merge', $r, $t); } } return $r;}
Array( [0] => 1,A,a,D [1] => 1,A,a,E [2] => 1,A,a,F [3] => 1,A,b,D [4] => 1,A,b,E [5] => 1,A,b,F [6] => 1,B,a,D [7] => 1,B,a,E [8] => 1,B,a,F [9] => 1,B,b,D [10] => 1,B,b,E [11] => 1,B,b,F [12] => 1,C,a,D [13] => 1,C,a,E [14] => 1,C,a,F [15] => 1,C,b,D [16] => 1,C,b,E [17] => 1,C,b,F [18] => 2,A,a,D [19] => 2,A,a,E [20] => 2,A,a,F [21] => 2,A,b,D [22] => 2,A,b,E [23] => 2,A,b,F [24] => 2,B,a,D [25] => 2,B,a,E [26] => 2,B,a,F [27] => 2,B,b,D [28] => 2,B,b,E [29] => 2,B,b,F [30] => 2,C,a,D [31] => 2,C,a,E [32] => 2,C,a,F [33] => 2,C,b,D [34] => 2,C,b,E [35] => 2,C,b,F)
$a = [1, 2];$b = ['A', 'B', 'C'];$c = ['a', 'b'];$d = ['D', 'E', 'F'];$r = Descartes($a, $b, $c);$r = Descartes($a, $b, $c, $d);print_r( array_map(function($v) { return join(',', $v); }, $r) );function Descartes() { $d = func_get_args(); if( count($d) < 2 ) return current($d); $n = array_product( array_map('count', $d) ); array_walk( $d, function(&$v, $k, $n) { $v = array_chunk( call_user_func_array('array_merge', array_pad([$v], $n/count($v), $v)), 1); }, $n); foreach($d as $i=>$t) { if($i == 0) { $r = $t; }else { array_multisort(array_map(function($v) { return $v[0]; }, $r), $r); $r = array_map('array_merge', $r, $t); } } return $r;}をサポートしていません
array() は [] に簡略化できます php5.4 でのみ利用可能ですか? php5.3 であることをどうやって思い出すことができますか?
簡単なコメント:
Array( [0] => 1,A,a,D [1] => 1,A,a,E [2] => 1,A,a,F [3] => 1,A,b,D [4] => 1,A,b,E [5] => 1,A,b,F [6] => 1,B,a,D [7] => 1,B,a,E [8] => 1,B,a,F [9] => 1,B,b,D [10] => 1,B,b,E [11] => 1,B,b,F [12] => 1,C,a,D [13] => 1,C,a,E [14] => 1,C,a,F [15] => 1,C,b,D [16] => 1,C,b,E [17] => 1,C,b,F [18] => 2,A,a,D [19] => 2,A,a,E [20] => 2,A,a,F [21] => 2,A,b,D [22] => 2,A,b,E [23] => 2,A,b,F [24] => 2,B,a,D [25] => 2,B,a,E [26] => 2,B,a,F [27] => 2,B,b,D [28] => 2,B,b,E [29] => 2,B,b,F [30] => 2,C,a,D [31] => 2,C,a,E [32] => 2,C,a,F [33] => 2,C,b,D [34] => 2,C,b,E [35] => 2,C,b,F)
array() を [] に単純化することと、クロージャの書き込みを使用することを除いて、新しいことは何もありません
クロージャは create_function 関数で書き換えることができます
array() を [] に単純化することを除いて、クロージャの記述方法以外に新しいものはありません。create_function 関数を使用してクロージャを書き換えることができます。5.3 にはこの構文がありません。 PHP の構文が JavaScript の構文にどんどん似てきているように感じるのはなぜですか?
モデレータのおかげで、私も比較のために 1 つ書きました。後で使うために保存しておきます。
えー
これは単純明快です