簡體   English   中英

PHP:將一個數組的值設置為另一個數組

[英]PHP: Set the values of one array to another array

我想創建一個新數組,並將其鍵設置為等於另一個數組的值。

開始:

$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中的元素指定年齡。

只是為了好玩,您可以這樣做:

$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)
}
$name_map = array();
foreach ($names as $name) {
  $name_map[$name] = isset($ages[$name])?$ages[$name]:null; 
}

問題在於$names中的值就是-值。 為了使它們“相等”一個年齡,您需要將它們作為關鍵。 因為PHP不支持通過引用傳遞鍵,所以這意味着創建一個新數組:

$name_age_map = array();
foreach($names as $name) {
    if(isset($ages[$name])) {
        $name_age_map[$name] = $ages[$name];
    }
    else {
        $name_age_map[] = $name;
    }
}

或者,如果您始終希望名稱成為鍵(可能更有意義):

$name_age_map = array();
foreach($names as $name) {
    $name_age_map[$name] =
            isset($ages[$name]) ? $ages[$name] : null;
}
$name_age_map = array();

foreach ($names as $name){
    // this can also be replaced with
    // if (array_key_exists($name, $ages)){
    if (in_array($name, array_keys($ages))){
        $name_age_map[$name] = $ages[$name];
    }
    else {
        $name_age_map[$name] = null;
    }
}

要操作原始數組,您需要將其翻轉,然后添加關聯的年齡。

嘗試這個:

$names = array_flip($names);
foreach($names as $key => $value)
{
    $names[$key] = (array_key_exists($key,$ages)) ? $ages[$key] : null;
}

比較兩個數組中的鍵時, array_key_exists()可以幫助您。 應用循環並在找到匹配項的地方分配值,否則返回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)
}
array_merge(
   array_combine(
       $names,
       array_fill(0,count($names),NULL)
   ),
   $ages);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM