【问题标题】:PHP: Set the values of one array to another arrayPHP:将一个数组的值设置为另一个数组
【发布时间】:2013-10-17 19:24:45
【问题描述】:

我想创建一个新数组,并将它的键设置为另一个数组的值。

开始:

$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 中的元素一个年龄值。

【问题讨论】:

  • 我查看了 array_combine(),但它基于数组索引 # 而不是匹配数组之间的键。
  • 我也可能会做类似的事情,很好地回答你自己的问题。在下面发帖并接受:)
  • $names 的元素是值,而不是键,所以不能给它们新的值。

标签: php arrays


【解决方案1】:

只是为了好玩,你可以这样做:

$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)
}

【讨论】:

    【解决方案2】:
    $name_map = array();
    foreach ($names as $name) {
      $name_map[$name] = isset($ages[$name])?$ages[$name]:null; 
    }
    

    【讨论】:

      【解决方案3】:
      array_merge(
         array_combine(
             $names,
             array_fill(0,count($names),NULL)
         ),
         $ages);
      

      【讨论】:

        【解决方案4】:
        $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;
            }
        }
        

        【讨论】:

        • array_key_exists 可能比in_array() 好。
        • 你是对的。谢谢你的提示。我将保留我当前的答案以供参考,因为还有其他使用 array_key_exists 函数的答案。
        【解决方案5】:

        要操作原始数组,您需要翻转它,然后添加相关的年龄。

        试试这个:

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

        【讨论】:

          【解决方案6】:

          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)
          }
          

          【讨论】:

            【解决方案7】:

            问题是$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;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-08-07
              • 2013-11-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-09-19
              相关资源
              最近更新 更多