0

新しい配列を作成し、そのキーを別の配列の値と等しく設定したいと考えています。

始める:

$names = array("don","james","jennifer","paul");
$ages = array("don" => 25, "paul" => 32);

終了:

$name_age_map = array(
 "don" => 25,
 "james" => null,
 "jennifer" => null,
 "paul" => 32,
);

これはPHPでどのように行うべきですか? これは私がこれまでに得た最高のものです:

$name_age_map = array();
foreach ($names as $name) {
  $name_age_map[$name] = $name_map[$name]; 
}

理想的には、新しい配列を作成することさえせず、$names の要素に年齢の値を与えるだけです。

4

7 に答える 7

4

楽しみのために、次のようにすることができます。

$names = array("don","james","jennifer","paul");
$ages  = array("don" => 25, "paul" => 32);
$names = array_merge(array_fill_keys($names, null), $ages);

var_dump($names);

収量:

array(4) {
  ["don"]=>
  int(25)
  ["james"]=>
  NULL
  ["jennifer"]=>
  NULL
  ["paul"]=>
  int(32)
}
于 2013-10-17T19:36:33.630 に答える
1
$name_map = array();
foreach ($names as $name) {
  $name_map[$name] = isset($ages[$name])?$ages[$name]:null; 
}
于 2013-10-17T19:30:00.187 に答える
0
array_merge(
   array_combine(
       $names,
       array_fill(0,count($names),NULL)
   ),
   $ages);
于 2013-10-17T19:36:25.457 に答える
0

array_key_exists()2 つの配列のキーを比較するときに役立ちます。ループを適用し、一致が見つかった場合は値を割り当て、それ以外の場合は null を割り当てます。これでうまくいくはずです。

$names = array("don","james","jennifer","paul");
$ages = array("don" => 25, "paul" => 32);

$merged = array();
foreach($names as $n) {
    if(array_key_exists($n, $ages)) {
        $merged[$n] = $ages[$n];
    } else {
        $merged[$n] = null;
    }
}

var_dump($merged);

//Produces

array(4) {
  ["don"]=>
  int(25)
  ["james"]=>
  NULL
  ["jennifer"]=>
  NULL
  ["paul"]=>
  int(32)
}
于 2013-10-17T19:35:58.633 に答える