2016-04-04 2 views
2

私は2つの配列を組み合わせたいと思います。どのように2つの配列を組み合わせ、それらの1つをもう一方の長さまで繰り返すのですか?

$arr1 = [1, 2, 3, 4, 5, 6, 7, 8]; 
$arr2 = ['a', 'b', 'c']; 

私はこのようになりたい:

1 = a 
2 = b 
3 = c 
4 = a 
5 = b 
6 = c 
7 = a 
8 = b 

私の現在の試みは、次のようになります。

function array_combine2($arr1, $arr2) { 
    $count = min(count($arr1), count($arr2)); 
    return array_combine(array_slice($arr1, 0, $count), array_slice($arr2, 0, $count)); 
} 

print_r(array_combine2($arr1,$arr2)); 

しかし、私が望むように、期待される出力を生成しません。

答えて

0
function combineThatShit($keys, $values){ 
    $ret = array(); 
    $i = 0; 
    foreach($keys as $key){ 
     if(!isset($values[$i])) $i = 0; 
     $ret[$key] = $values[$i]; 
     $i++; 
    } 
    return $ret; 
} 

デモ:あなたはA2サイズを知っていればhttps://3v4l.org/mZZlv

+0

はどうもありがとうございました!それは働いて – Arman

+0

素晴らしいです。これがあなたのためになったら、私の答えでチェックマークを押してください。 –

+0

複数の素晴らしい答え!すべてが機能していますが、このソリューションが最初に投稿されました。だから私はこれを受け入れています。ありがとう - RizJa - オブジェクトマニピュレータ – Arman

1

はモジュラスを試してみてください。

$a1 = [1,2,3,4,5,6,7,8]; 
$a2 = ['a','b','c']; 
$a3; 

//Hardcoding the modulus value 
for ($x = 0; $x < count($a1); $x++) { 
    $a3[$x] = $a2[($a1[$x] - 1) % 3]; 
} 

//Dynamic value as per a2 size 
for ($x = 0; $x < count($a1); $x++) { 
    $a3[$x] = $a2[($a1[$x] - 1) % count($a2)]; 
} 

print_r($a3); 

出力:

Array ([0] => a [1] => b [2] => c [3] => a [4] => b [5] => c [6] => a [7] => b) 
+0

ありがとう! これは2つの通知を受け取ります 'PHPの注意:定義されていないオフセット:8行/home/**/web/php/somearray.php 32行目 PHPの注意:未定義のオフセット:-1/home/**/web/php /somearray.php on line 32' – Arman

+0

あなたの配列キーを確認したいかもしれません。彼らは意図したものと一致していないようです。 –

+0

@Armanインデックスは範囲外であり、更新されたコードでした。今すぐやってみて下さい。 – RizJa

1

さてあなたはMultipleIteratorで、このシンプルを解決し、ちょうどInfiniteIteratorなどArrayIteratorし、それらの一つとして、これら二つの配列を追加することができます。

コード:

<?php 

    $arr1 = [1,2,3,4,5,6,7,8]; 
    $arr2 = ['a','b','c']; 
    $result = []; 

    $mIt = new MultipleIterator(); 
    $mIt->attachIterator(new ArrayIterator($arr1)); 
    $mIt->attachIterator(new InfiniteIterator(new ArrayIterator($arr2))); 

    foreach($mIt as $v) 
     $result[$v[0]] = $v[1]; 

    print_r($result); 

?> 

出力:

Array (
    [1] => a 
    [2] => b 
    [3] => c 
    [4] => a 
    [5] => b 
    [6] => c 
    [7] => a 
    [8] => b 
) 
+1

これも素晴らしいです!ありがとうございました – Arman

関連する問題