Assoctiative dizileri birleştirilirken boşlukları Sayma

3 Cevap php

Ben bu 2 dizileri birleştirmek çalışıyorum

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3");
$arr2 = array('a' => "9", 'b' => "8", 'd' => "7");

Bu gibi görünen bir diziye

$arr1 = array(  
   'a' => array("1", "9"),  
   'b' => array("2", "8"),  
   'c' => array("3", ""),
   'd' => array("", "7")
);

Zor kısmı boşlukları olduğunu. Ben yerde onları korumak gerekir.

Teşekkürler

3 Cevap

Burada benim önerim bu. Bu tarif ne göre, diziler bir keyfi sayıda birleştirmek olacak.

error_reporting(E_ALL | E_STRICT);
header('Content-Type: text/plain');

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3");
$arr2 = array('a' => "9", 'b' => "8", 'd' => "7");
$arr = combine($arr1, $arr2);
print_r($arr);

function combine() {
  $keys = array();
  foreach (func_get_args() as $arr) {
    if (is_array($arr)) {
      $keys += $arr;
    }
  }
  $keys = array_keys($keys);
  $values = array_pad(array(), count($keys), array());
  $ret = array_combine($keys, $values);
  foreach (func_get_args() as $arr) {
    foreach ($keys as $k) {
      $v = array_key_exists($k, $arr) ? $arr[$k] : '';
      array_push($ret[$k], $v);
    }
  }
  return $ret;
}

Çıktı:

Array
(
    [a] => Array
        (
            [0] => 1
            [1] => 9
        )

    [b] => Array
        (
            [0] => 2
            [1] => 8
        )

    [c] => Array
        (
            [0] => 3
            [1] => 
        )

    [d] => Array
        (
            [0] => 
            [1] => 7
        )

)

Bu deneyin:

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3");
$arr2 = array('a' => "9", 'b' => "8", 'd' => "7");

$keys = array();
$merged = array()

for($arr1 as $key=>$val)
{
    array_push($keys,$key);
}
for($arr2 as $key=>$val)
{
    array_push($keys,$key);
}
for($key in keys)
{
    $merged[$key] = array("","");
    if(isset($arr1[$key])) $merged[$key][0] = $arr1[$key];
    if(isset($arr2[$key])) $merged[$key][1] = $arr2[$key];
}

Ben Cletus'un yaklaşım gibi, bu yüzden ben sadece :) çalıştığından emin yaptık

function combine() {
    $keys = array();
    foreach (func_get_args() as $arr) {
        if (is_array($arr)) {
            $keys = array_merge($keys, array_keys($arr));
        }
    }
    $keys = array_unique($keys);
    $values = array_pad(array(), count($keys), array());
    $ret = array_combine($keys, $values);
    foreach (func_get_args() as $arr) {
        foreach ($keys as $k) {
            $v = '';
            if (array_key_exists($k, $arr)){
                $v = $arr[$k];
            }
            array_push($ret[$k], $v);
        }
    }
    return $ret;
}