【问题标题】:Modify array keys of an associative array [duplicate]修改关联数组的数组键[重复]
【发布时间】:2013-09-13 21:07:20
【问题描述】:

我有这个数组

 $the_posted = Array
            (
    0 => Array
        (
            0 => 1,
            1 => 2,
            2 => 3,
            3 => 4,
        ),

    1 => Array
        (
            0 => 5,
            1 => 6,
            2 => 7,
            3 => 8,
        )

);

我需要修改谁的键。我试图修改数组键,例如

$all_array_keys = array_keys($the_posted);

 foreach ( array_keys($the_posted) as $k=>$v )
{
  $all_array_keys[$k]= rand();
}

  echo '<pre>';
  print_r($all_array_keys);
  echo "<hr/>";
  print_r($the_posted);
  echo '<pre>';

我得到了这个结果

Array
(
    [0] => 25642
    [1] => 8731
)

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [1] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 7
            [3] => 8
        )

)

键的变化没有反映在最终的数组中。我该如何进行这项工作?

【问题讨论】:

标签: php arrays


【解决方案1】:

您可以使用以下代码:

foreach ( array_keys($the_posted) as $k=>$v )
{   
  $new_key = rand();
  $new_posted[$new_key] = $the_posted[$v];
  unset($the_posted[$v])
}

在这里,我们创建了一个新数组$new_posted,它将包含带有新键的数据,如下所示:

Array
(
    [28228] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )

    [23341] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 7
            [3] => 8
        )

)

【讨论】:

  • 而且,当且仅当您的内存受限时(也许您没有为 PHP 分配大量内存并且数组非常大),您还可以在每次迭代时 unset($the_posted[$k]) ,这将保持相同的内存占用,但会牺牲性能。但如果内存不是问题,那么没有unset() 应该会明显更快。
  • @rid:同意你的意见。
【解决方案2】:

要更改项目的键,请执行以下操作:

$the_posted[$newkey] = $the_posted[$oldkey];
unset($the_posted[$oldkey]);

所以在你的情况下:

foreach ( $the_posted as $k=>$v )
{
    $newkey = rand();
    while(isset($the_posted[$newkey]))
       $newkey = rand();
    $the_posted[$newkey] = $the_posted[$k];
    unset($the_posted[$k]);
}

【讨论】:

  • 是的。我更新了代码来解决这个问题。
猜你喜欢
  • 2017-06-17
  • 2023-03-15
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多