【问题标题】:Change the array KEY to a value from sub array将数组 KEY 更改为子数组中的值
【发布时间】:2011-01-24 11:09:27
【问题描述】:

这是我数据库中的结果集

print_r($plan);
Array
(
    [0] => Array
        (
            [id] => 2
            [subscr_unit] => D
            [subscr_period] => 
            [subscr_fee] => 
        )

    [1] => Array
        (
            [id] => 3
            [subscr_unit] => M,Y
            [subscr_period] => 1,1
            [subscr_fee] => 90,1000
        )

    [2] => Array
        (
            [id] => 32
            [subscr_unit] => M,Y
            [subscr_period] => 1,1
            [subscr_fee] => 150,1500
        )

)

如何将$plan[0] 更改为$plan[value_of_id]

谢谢。

【问题讨论】:

  • 根据您查询结果的方式,您可以在此处对数组进行更改,但我们必须查看您的代码。

标签: php arrays hashtable


【解决方案1】:

这不会就地执行,但是:

$new_plan = array();
foreach ($plan as $item)
{
  $new_plan[$item['id']] = $item;
}

【讨论】:

    【解决方案2】:

    这可能有点晚了,但我一直在寻找解决同一问题的方法。但是由于所有其他答案都涉及循环并且太复杂了恕我直言,我自己一直在尝试一些东西。

    结果

    $items = array_combine(array_column($items, 'id'), $items);
    

    就这么简单。

    【讨论】:

    • 或者,简单的array_column($items, null, "id");
    【解决方案3】:

    您也可以使用array_reduce,它通常用于减少数组。也就是说,它可用于实现您想要的数组格式,只需返回与输入数组中相同的项目,但使用所需的键。

    // Note: Uses anonymous function syntax only available as of PHP 5.3.0
    //       Could use create_function() or callback to a named function
    $plan = array_reduce($plan, function($reduced, $current) {
        $reduced[$current['id']] = $current;
        return $reduced;
    });
    

    但是请注意,如果上面的段落没有说清楚,那么这种方法对于问题中概述的您的个人要求来说是多余的。但是,对于希望对数组做更多事情而不是简单地更改键的读者来说,它可能会很有用。

    【讨论】:

      【解决方案4】:

      查看您用来组装 $plan 的代码会有所帮助,但我会假设它是这样的

      while ($line = $RES->fetch_assoc()) {
          $plan[] = $line;
      }
      

      您可以在从数据库中提取数据时简单地分配一个显式值,如下所示:

      while ($line = $RES->fetch_assoc()) {
          $plan[$line['id']] = $line;
      }
      

      这是假设 $RES 是您的数据库查询的结果集。

      【讨论】:

        【解决方案5】:

        在我看来,没有比带有null 第二个参数的array_column() 更简单或更具表现力的技术了。 null 参数通知函数保留每个子数组中的所有元素,新的第一级键来自array_column() 的第三个参数中指定的列。

        代码:(Demo)

        $plan = array_column($plan, null, 'id');
        

        注意:此技术也常用于确保所有子数组在父数组中包含唯一值。发生这种情况是因为数组可能不包含同一级别的重复键。因此,如果在使用 array_column() 时出现重复值,则先前的子数组将被随后每次出现的相同值覆盖以用作新键。

        Demonstration of "data loss" due to new key collision.

        【讨论】:

          【解决方案6】:
          $plans = array();
          foreach($plan as $item)
          {
              $plans[$item['id']] = $item;
          }
          

          $plans 包含关联数组。

          这只是一个简单的解决方案。

          【讨论】:

            【解决方案7】:
            $newplan = array();
            foreach($plan as $value) {
                $id = $value["id"];
                unset($value["id"]);
                $newplan[$id] = $value;
            }
            

            【讨论】:

            • 这个答案缺少教育解释。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-20
            • 2017-02-19
            • 1970-01-01
            • 2011-12-07
            相关资源
            最近更新 更多