2014-09-22 19 views
8

Aşağıdaki kodu var arasındaki tuşları eksik ekledikten yaklaşık dizi anahtarlarını birleştirerekPHP diziler

Array 
(
    [0] => Array 
     (
      [a] => some value 
      [b] => some value 
      [c] => some value 
     ) 

    [1] => Array 
     (
      [a] => another value 
      [d] => another value 
      [e] => another value 
      [f] => another value 
     ) 

    [2] => Array 
     (
      [b] => some more value 
      [x] => some more value 
      [y] => some more value 
      [z] => some more value 
     ) 

) 

nasıl gider ve ile bitirmek çıkıştan sonra?

Array 
(
    [0] => Array 
     (
      [a] => some value 
      [b] => some value 
      [c] => some value 
      [d] => 
      [e] => 
      [f] => 
      [x] => 
      [y] => 
      [z] => 
     ) 

    [1] => Array 
     (
      [a] => another value 
      [b] => 
      [c] => 
      [d] => another value 
      [e] => another value 
      [f] => another value 
      [x] => 
      [y] => 
      [z] => 
     ) 

    [2] => Array 
     (
      [a] => 
      [b] => some more value 
      [c] => 
      [d] => 
      [e] => 
      [f] => 
      [x] => some more value 
      [y] => some more value 
      [z] => some more value 
     ) 

) 

Bunu nasıl elde edeceğinize dair herhangi bir yardım için şimdiden teşekkür ederiz.

$a = array('a' => 'some value', 'b' => 'some value', 'c' => 'some value'); 
$b = array('a' => 'another value', 'd' => 'another value', 'e' => 'another value', 'f' => 'another value'); 
$c = array('b' => 'some more value', 'x' => 'some more value', 'y' => 'some more value', 'z' => 'some more value'); 
$d = array($a, $b, $c); 
$keys = array(); 
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($d)) as $key => $val) $keys[$key] = ''; 
$data = array(); 
foreach($d as $values) { 
    $data[] = array_merge($keys, $values); 
} 

echo '<pre>'; 
print_r($data); 

DÜZENLEME: diğer bir yolu boş eşleştirilmiş tuşlarıyla anahtar çifti değerleri oluşturmak olacaktır, o zaman, her $d harita ve birleştirme:

+4

Bu eğlenceli bir loop-rollercoaster olacak. Başka kimse o zamana kadar –

+0

sahipse bir sigara içtiğimde de cevap vereceğim. Sadece bir diziyi başlatabilir ve onları http://3v4l.org/D6uml ile birleştirebilirsiniz. @OleHaugset aslında hiçbir (manuel) döngüye ihtiyaç duymuyor – PeeHaa

+2

Yine de ona yukarıda belirtilen şekilde istediği sonucu vermiyor. Bu sadece iki diziyi bire birleştirir. Çok kanallı bir –

cevap

8

Evet Bu durumda array_merge kullanabilirsiniz

$keys = array_keys(call_user_func_array('array_merge', $d)); 
$key_pair = array_combine($keys, array_fill(0, count($keys), null)); 
$values = array_map(function($e) use ($key_pair) { 
    return array_merge($key_pair, $e); 
}, $d); 
+0

Mükemmel! Tam olarak peşimdeydim. Yardımın için çok teşekkürler! – MrUpsidown

+0

@MrUpsidown emin adam bu yardımcı oldu – Ghost

4
$a = array('a' => 'some value', 'b' => 'some value', 'c' => 'some value'); 
$b = array('a' => 'another value', 'd' => 'another value', 'e' => 'another value', 'f' => 'another value'); 
$c = array('b' => 'some more value', 'x' => 'some more value', 'y' => 'some more value', 'z' => 'some more value'); 

$d = array_merge(array_merge($a, $b),$c); 

foreach($d as $k=>$v){ 
    $aN[$k] = isset($a[$k])?$a[$k]:''; 
    $bN[$k] = isset($b[$k])?$b[$k]:''; 
    $cN[$k] = isset($c[$k])?$c[$k]:''; 
} 
$dN = array($aN, $bN, $cN); 
+0

Güzel. Bu beklediğim çıktıyı veriyor. Ama gerçek senaryo için bundan çok daha fazla dizi ve anahtar var. Bu işlemi * n * dizisi sayısı ve * n * tuş sayısı için otomatik hale getirmenin bir yolunu görür müsün? Bunun için – MrUpsidown

+0

@ Ghost'un cevabı güzel! –

+0

Yup, tam olarak kontrol ettiğim şey bu. Yardımlarınız için zaten teşekkürler! – MrUpsidown