1

az、0-9 の配列を作成しようとしていますが、それぞれに同じ配列のサブセットがあります。

いいえ:

array(
   "a"=>array("a","b","c"..."0","1","2")
   "b"=>array("a","b","c"..."0","1","2")
   "c"=>array("a","b","c"..."0","1","2")
   "d"=>array("a","b","c"..."0","1","2")
   "0"=>array("a","b","c"..."0","1","2")
   "1"=>array("a","b","c"..."0","1","2")
   "2"=>array("a","b","c"..."0","1","2")
   "3"=>array("a","b","c"..."0","1","2")
)

私がこれを試しているところ

$finalArr = array();
$letterArr = range('a', 'z');
$numericArr = range(0,9);
$startArr = array_merge($letterArr, $numericArr);

foreach($startArr as $key => $val)
{
    $finalArr[$val] = $startArr;
    foreach($finalArr[$val] as $key2 => $val2)
    {
        $finalArr[$val][$val2] = $startArr;
    }


}

しかし、それは最初のパスでしか機能しません...その後、混乱し始めます。何か案は?

4

3 に答える 3

2

配列をループするときに配列を変更しています。これは良い習慣ではなく、この場合は必要さえありません。

array_fill_keys()つまり、次のように使用できます。

$arr = str_split('abcdefghijklmnopqrstuvwxyz0123456789');
$final = array_fill_keys($arr, $arr);
于 2013-09-09T06:40:36.637 に答える
0

既存のロジックを使用するにunset($finalArr[$val][$key2]);は、一時的に保存した配列をクリアする必要があります。

$finalArr = array();
$letterArr = range('a', 'z');
$numericArr = range(0,9);
$startArr = array_merge($letterArr, $numericArr);

foreach($startArr as $key => $val)
{
    $finalArr[$val] = $startArr;
    foreach($finalArr[$val] as $key2 => $val2)
    {
        unset($finalArr[$val][$key2]);
        $finalArr[$val][$val2] = $startArr;
    }    
}

より明確なロジックが必要な場合、これはより理にかなっています。

foreach($startArr as $val)
{
    foreach($startArr as $val2)
    {                                 
        $finalArr[$val][$val2] = $startArr;
    }
}
于 2013-09-09T06:41:03.590 に答える