1

2 つの配列 ( $numbersand ) があり、 everyと every$lettersを組み合わせた関数に基づいて新しい配列を作成したいと考えています。この関数のパラメータには、との両方の値が含まれます。(注: $numbers と $letters の値の数は同じではありません)。私はこのようなものが必要です:$numbers$letters$numbers$letters

$numbers = array(1,2,3,4,5,6,...);
$letters = array('a','b','c','d','e',...);

function myFunction($x,$y){
     // $output = some code that use $x and $y
     return $output;
};

$array_1 = array( (myFunction($numbers[0],$letters[0])), (myFunction($numbers[0],$letters[1])), myFunction($numbers[0],$letters[2]), myFunction($numbers[0],$letters[3]), etc);

$array_2 = array( (myFunction($numbers[1],$letters[0])), (myFunction($numbers[1],$letters[1])), myFunction($numbers[1],$letters[2]), myFunction($numbers[1],$letters[3]), etc);

$array_3 = array( (myFunction($numbers[2],$letters[0])), (myFunction($numbers[2],$letters[1])), myFunction($numbers[2],$letters[2]), myFunction($numbers[2],$letters[3]), etc);

...

$array_N = array( (myFunction($numbers[N],$letters[0])), (myFunction($numbers[N],$letters[1])), myFunction($numbers[N],$letters[2]), myFunction($numbers[N],$letters[3]), etc);

$array = array($array_1, $array_2, $array_3, etc.);

これが機能することはわかっていますが、特に各配列に多くの値がある場合は、コードが多くなります。より少ないコードで同じ結果を得る方法はありますか? 私はこれを試しましたが、うまくいきません:

$array = array_map("myFunction($value, $letters)",$numbers));

どんな助けでも感謝します!

4

2 に答える 2

6

使用したい場合array_map

$numbers = array(1,2,3,4,5,6);
$letters = array('a','b','c','d','e');

$result = array_map(function($n) use ($letters) {
    return array_map(function($l) use ($n) {
         return myFunction($n, $l);
    }, $letters);
}, $numbers);

これがデモです。

于 2012-10-08T03:33:52.257 に答える
2

この問題に対処する方法はおそらくたくさんありますが、読みやすさ/保守性のために、単純にいくつかのループを使用します。

$array = array();

foreach ($numbers as $number) {
    $row = array();

    foreach ($letters as $letter) {
        $row[] = myFunction($number, $letter);
    }

    $array[] = $row;
}
于 2012-10-08T02:12:43.327 に答える