1

ますます難しくなっています。次のようなクエリ結果があります。

結果 = 配列(

A = array(
        [a]=>'1',
        [b] =>'2',
     );

B = array(
        [a] =>'1',
        [b] =>'3',
     );

C = array(
        [a] =>'1',
        [b] =>'4',
     );

**and more...**

);

では、次のようにそれらを 1 つの配列にマージするにはどうすればよいですか。

結果 = 配列(

     Z = array(

        [a] =>'1',
        [b] => array(

               [0] =>'2',
               [1] =>'3',
               [2] =>'4',
        );

     );

);

ありがとうございます。プレゼンテーションが下手で申し訳ありません。

4

3 に答える 3

2

PHPマニュアルのarray_merge関数を調べることができます

于 2012-12-08T04:47:45.163 に答える
1

キー(文字列、数値など)にプリミティブ値のみを含める予定の場合、これは機能します。

<?php

function array_combine_keys($a, $b) {
    $c = $a;
    foreach ($b as $k=>$v) {
        // Value can be only primitive, not an array itself
        if (isset($a[$k]) && $a[$k] !== $v) {
            $c[$k] = array($a[$k], $v);
        } else {
            $c[$k] = $v;
        }
    }
    return $c;
}

$a = array('a' => '1', 'b' => '2');
$b = array('a' => '1', 'b' => '3', 'c' => '5');

var_dump(array_combine_keys($a, $b));

?>

array(3) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "3"
  }
  ["c"]=>
  string(1) "5"
}

より用途の広い方法は、値にも配列を許可し、関係なくキーが常に配列であることを確認することです。これは、結果。(+) は、2 つの配列の結合です。

<?php

function array_combine_keys($a, $b) {
    $c = $a;
    foreach ($b as $k=>$v) {
        if (!is_array($v)) {
            $v = array($v);
        }
        if (isset($a[$k])) {
            $av = $a[$k];
            if (!is_array($av)) {
                $av = array($av);
            }
            $c[$k] = $av + $v;
        } else {
            $c[$k] = $v;
        }
    }
    return $c;
}

$a = array('a' => '1', 'b' => array('2', '4'));
$b = array('a' => '1', 'b' => array('3'), 'c' => '5');

var_dump(array_combine_keys($a, $b));

?>

array(3) {
  ["a"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  ["b"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "4"
  }
  ["c"]=>
  array(1) {
    [0]=>
    string(1) "5"
  }
}
于 2012-12-08T04:49:08.460 に答える
1

なぜあなたが同じ質問をし続けるのかわかりませんが、これがあなたの問題に対する私の答えです。

$result = array_merge_recursive($a, $b, $c);
foreach($result as $k => $v) $result[$k] = array_unique($v);
print_r($result);
于 2012-12-08T07:54:16.580 に答える