【问题标题】:PHP insert index as value in arrayPHP在数组中插入索引作为值
【发布时间】:2015-10-29 14:22:41
【问题描述】:

如何将当前添加项的索引号也添加到多维数组中?

$data_array[] = array('data_array_index' => *the index number of the this array on $data_array*, 'stuff' => 'stuff', etc.)

所以当我:

print_r($data_array);

Array(
  [0] => Array(
            data_array_index => 0
            stuff => stuff
         )
  [25] => Array(
            data_array_index => 25
            stuff => stuff
         )
  etc.

谢谢

编辑

这应该有效吗?

$data_array[] = array('data_array_index' => end($data_array)+1, 'stuff' => 'stuff', etc.)

【问题讨论】:

  • 你不能“添加”,你必须重建阵列。 array(0=>array('data_array_index'=>0,etc...))
  • 我在一个 foreach 循环中,它在每个循环中使用添加的数据重建数组。顺便说一句,这不是在回答我的问题....
  • 只是一个问题,如果您可能无法直接访问它,为什么您需要数组中 data_array_index 中的密钥,因为您没有 $data_array 密钥?
  • 我需要稍后访问 $data_array 内所有多维数组中与键 'data_array_index' 关联的所有数据

标签: php arrays indexing


【解决方案1】:

你可以这样做:

$array = [
   0 => [ "data_array_index" => 0, "stuff" => "stuff" ],
   25 => [ "data_array_index" => 25, "stuff" => "stuff" ]
];

$array[] = array('data_array_index' => 0, 'stuff' => 'stuff')

end($array);
$last_id = key($array);

$array[$last_id]['data_array_index'] = $last_id;

我不知道为什么要将 data_array_index 放在数组中,因为如果将其放入 foreach 循环中,则无需变量即可获得密钥。

例子:

foreach($key => $data) {
        ^^^^ The same as `data_array_index`
}

【讨论】:

  • 对非常大的数组无效
  • @Perocat,据我所知,这是最快的方法。
  • @Perocat,它是 O(1),几乎无法改进。你能详细说明它在哪些方面是低效的吗?
【解决方案2】:

假设你有这个数组:

$data_array = [
   0 => [ "data_array_index" => 0, "stuff" => "stuff" ],
   25 => [ "data_array_index" => 25, "stuff" => "stuff" ]
];

现在设置一个键(注意$data_array[100]):

$data_array[100] = [ "data_array_index" => 100, "stuff" => "stuff" ];

【讨论】:

  • 我猜他想要某种“自动化”,因为他事先并不知道密钥 100。
  • @Jan 那我想明白了。
  • @Jan 是的,就像你描述的那样,它应该是“自动的”
  • 我猜索引只有两种可能的解决方案:要么结束(这可以通过count() 计算),要么拼接数组。但是在这两种方式中,您最终都会提前知道索引,还是我错了?
【解决方案3】:

尝试一次

$arr=array(12=>array("stuff"=>"stuff1"),15=>array("stuff"=>"stuff2"));

foreach($arr as $key=>$val){
$arr[$key]['data_array_index']=$key;    
}

echo "<pre>"; print_r($arr);

【讨论】:

  • 对非常大的数组无效
【解决方案4】:

对于我的解决方案,请参阅下面的代码。请注意,现在这是一个非常基本的功能。它不提供任何故障保护或回退。如果您删除一个键,它将填充空间等。

<?php

// data array
$data_array = [];

// additional info for the array
$info_a = "Lorem Ipsum";
$info_b = "Lorem Ipsum";

// call function
addElement($data_array, $info_a);
addElement($data_array, $info_b);

// display output
echo '<pre>';
print_r($data_array);
echo '</pre>';

function addElement(&$array, $info)
{
    // add info to the array
    $array[] = [
        'stuff'=>$info
    ];

    // get the key of the current array
    end($array);
    $key = key($array);

    // add this information to the array
    $array[$key]['data_array_index'] = $key;
}
?>

输出将是

Array
(
    [0] => Array
        (
            [stuff] => Lorem Ipsum
            [data_array_index] => 0
        )

    [1] => Array
        (
            [stuff] => Lorem Ipsum
            [data_array_index] => 1
        )

)

【讨论】:

    【解决方案5】:

    使用array_walk

    array_walk($data_array,function($value,$key)use($new_array) {
        $value['data_array_index'] = $key;
        $new_array[$key]=$value;
    });
    

    工作演示:http://phpfiddle.org/main/code/p937-7cue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2010-11-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2014-04-29
      • 2018-02-25
      相关资源
      最近更新 更多