1

この3つの配列をマージするにはどうすればよいですか

$name ={"Tom", "John", "David"};
$v1 = {"Tom":100, "David":200};
$v2 = {"John":500, "Tom":400};

2つの異なる方法で1つの多次元連想配列に?1つの方法は、キーの順序を配列「name」の順序と同じにする必要があることです。

$name_merged_original_order = array (
    "Tom" => Array(
        "v1" => 100,
        "v2" => 400
    ),
    "John" => Array(
        "v1" => "N/A",
        "v2" => 500
    ),
    "David" => Array(
        "v1" => 100,
        "v2" => "N/A"
    )
)

別の方法は、配列「名前」のアルファベット順です。

$name_merged_asc = array (
    "David" => Array(
        "v1" => 100,
        "v2" => "N/A"
    ),
    "John" => Array(
        "v1" => "N/A",
        "v2" => 200
    ),
    "Tom" => Array(
        "v1" => 100,
        "v2" => 400
    ),
)

トリッキーな部分は、配列「v1」と「v2」が「名前」のキーとして順序付けられていないことです。また、「名前」のようにすべてのキーを持っているわけではありません。ありがとう!

4

4 に答える 4

2

これはテストされておらず、最も簡単な解決策です。

$name_merged_original_order = array();
foreach($name as $key){
    $name_merged_original_order[$key] = array();
    if(array_key_exists($key, $v1)){
        $name_merged_original_order[$key]['v1'] = $v1[$key];
    }
    else{
        $name_merged_original_order[$key]['v1'] = 'N/A';
    }
    if(array_key_exists($key, $v2)){
        $name_merged_original_order[$key]['v2'] = $v2[$key];
    }
    else{
        $name_merged_original_order[$key]['v2'] = 'N/A';
    }
}

sort($name);
$name_merged_asc = array();
foreach($name as $key){
    $name_merged_asc[$key] = array();
    if(array_key_exists($key, $v1)){
        $name_merged_asc[$key]['v1'] = $v1[$key];
    }
    else{
        $name_merged_asc[$key]['v1'] = 'N/A';
    }
    if(array_key_exists($key, $v2)){
        $name_merged_asc[$key]['v2'] = $v2[$key];
    }
    else{
        $name_merged_asc[$key]['v2'] = 'N/A';
    }
}
于 2013-01-06T04:59:49.197 に答える
1

私が理解しているように、あなたはそのようなものが欲しいと思います:

$name = array("Tom", "John", "David");
$result = array();
$v1 = array("Tom" => "200", "John" => "100", "David" => "10");
$v2 = array("Tom" => "254", "David" => "156");
$vars = array("v1", "v2");
foreach($name as $n)
{
  $result[$n] = array();
  foreach($vars as $v)
  {
    if(array_key_exists($n, ${$v}))
      $result[$n][$v] = ${$v}[$n];
  }
}

私はあなたが必要なものであることを願っ$resultています。

于 2013-01-06T05:06:43.993 に答える
1

たとえば、次の配列があります。

<?php
$FirstArrays = array('a', 'b', 'c', 'd');
$SecArrays = array('1', '2', '3', '4');

1)

foreach($FirstArrays as $index => $value) {
    echo $FirstArrays[$index].$SecArrays[$index];
    echo "<br/>";
}

または2)

for ($index = 0 ; $index < count($FirstArrays); $index ++) {
  echo $FirstArrays[$index] . $SecArrays[$index];
  echo "<br/>";
}
于 2013-03-28T13:00:58.613 に答える
0

コメントから、3つの配列すべてで一致するアイテムのみが必要であると想定します。

for( $i=0; $i< count($name) ; $i++){
    if( !empty( $v1[ $name[$i]]) &&  !empty( $v2[ $name[$i]]) ){
       $newArray[$name[$i]]= array( 'v1'=> $v1[ $name[$i]], 'v2'=> $v2[ $name[$i]]):
    }
}

分類する:

  asort($newArray);
于 2013-01-06T04:59:49.867 に答える