Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并关联数组时的空格计数_Php_Arrays_Syntax - Fatal编程技术网

Php 合并关联数组时的空格计数

Php 合并关联数组时的空格计数,php,arrays,syntax,Php,Arrays,Syntax,我正在尝试合并这两个数组 $arr1 = array('a' => "1", 'b' => "2", 'c' => "3"); $arr2 = array('a' => "9", 'b' => "8", 'd' => "7"); 放入一个如下所示的数组中 $arr1 = array( 'a' => array("1", "9"), 'b' => array("2", "8"), 'c' => array("3"

我正在尝试合并这两个数组

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3");
$arr2 = array('a' => "9", 'b' => "8", 'd' => "7");
放入一个如下所示的数组中

$arr1 = array(  
   'a' => array("1", "9"),  
   'b' => array("2", "8"),  
   'c' => array("3", ""),
   'd' => array("", "7")
);
棘手的部分是空白。我需要把它们保存在适当的地方

谢谢

试试这个:

$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];
}

这是我的建议。它将根据您描述的内容组合任意数量的数组

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;
}
输出:

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

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

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

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

)

我喜欢克莱特斯的方法,所以我只是确保它有效:)


似乎您首先要访问一个元素,然后检查它是否
isset
正确。如果$arr1有a、b、c键,$arr2有a、b、d键,$ret将有a、b、c、d键。d将不存在于$arr2中,因此isset()将检查以放置OP想要的空字符串。我更指的是,如果未设置
$v
,您将收到通知。另外,您的第一个
foreach
循环中的数组求和对我不起作用。看看我发布的对你代码的修改。
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;
}

function merge()
{

    $array_of_arrays = func_get_args();

    //get all the unique keys    
    $final_array_keys = array_keys( call_user_func_array( "array_merge", $array_of_arrays ) );

    //make final array
    $final_array = array();
    foreach( $final_array_keys as $key ) {
        foreach( $array_of_arrays as $current_array ) {
            $final_array[$key][] = array_key_exists( $key, $current_array ) ? $current_array[$key] : "";
        }
    }
    return $final_array;

}
foreach (array_merge($arr1, $arr2) as $key => $val)
{
  $result[$key] = array("{$arr1[$key]}", "{$arr2[$key]}");
}

var_dump($result);