在PHP中通过整数索引访问关联数组

我想使用键/值对的数组索引来设置关联数组的值。 例如:

$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" ); $my_arr[1] = "not so much bling"; // Would change the value with key bling2. 

这怎么可以做到这一点,而不使用密钥string?

使用array_keys 。

 $keys = array_keys($my_arr); $my_arr[$keys[1]] = "not so much bling"; 

希望这可以帮助。

数字和关联索引键之间没有关联。

当你说你想使用键/值的数组索引设置关联数组的值时 ,你必须使用给定的键, $array[1]$array['foo']

考虑这个数组

 print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') ); 

这会给

 Array ( [0] => foo [foo] => bar [1] => baz [some] => value ) 

foo是数组中的第二个元素。 这是偏移量 ,但它与索引1无关。正如你可以看到,在上面的数组中,索引1与baz相关联。 假设只是因为foo是第一个与实际的数字键1有关的联合关键字是错误的。就像some关联到2一样。

同样,对于如上所示的混合数组, array_keys在本站的其他地方提出的解决scheme将无法正常工作,因为

 print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) ); 

会给

 Array ( [0] => 0 [1] => foo [2] => 1 [3] => some ) 

所以当你做$array[$keys[1]]你真的在做$array['foo'] 。 但是,如果你想访问该数组中的第二个关联值( 'some' ),你不能做$array[$keys[2]]因为那会计算到$array[1] ,那就是baz

元素的偏移与其关键或价值完全无关

 print_r( array( 100 => 'foo', 'foo' => 'bar', 50 => 'baz', 'some' => 'value' ) ); 

真正意思

 Array ( //key value offset/position [100] => foo // 0 [foo] => bar // 1 [50] => baz // 2 [some] => value // 3 ) 

这意味着偏移量为0的元素是foo,虽然它的关键是100.如果你想通过偏移量从数组中提取元素,你必须使用

 $third = array_splice($array, 2, 1); echo $third[0]; // baz 

这将创build一个只包含第三个位置的元素的数组。

或者你可以使用一个ArrayIteratorArrayIterator实现了一个Seekable接口,可以让你在数组中寻找一个特定的位置/偏移,然后获取:

 $iterator = new ArrayIterator($array); $iterator->seek(3); echo $iterator->current(); // value 

虽然array_keys()允许访问第n个键,但array_values会给你第n个值。

 <?php $array = [ 0 => 'Zero', '1' => 'One', 'Two' => 'Two', ]; echo array_values($array)[2]; ?> 

会输出'Two'。

彼此之间有优势吗? 那么,我能看到的唯一一个小数就是数组访问次数。

array_keys()你需要3。

  1. 从数据数组中获取密钥。
  2. 从键列表中获取第n个键。
  3. 使用数据数组中的第n个键获取值。

array_values() ,你只需要2。

  1. 从数据数组中获取值。
  2. 从值列表中获取第n个值。

但是,另一方面,键通常更小,数据可以嵌套很大,所以总的来说,使用array_keys()可能更安全。

另一种可能性是将其转换为一个正常的数组:

$ arraybuff = implode(“~~~”,$ my_arr);
$ my_arr = explode(“~~~”,$ arraybuff);

其中“~~~”是不会在您的数据中出现的分隔符。

现在您可以使用等于偏移的数字索引来访问数组。

如果您仍然需要保留您的关联数组,只需将其分配给一个不同的variables。

尝试这个。 它适合你。

 $result= array_values($my_arr); // Array with indexes you need 

如果数组很大,那么array_keysarray_values都是浪费的,因为它们将分配一个与原始大小相同的新数组,以获得第n个键(或值)。

array_slice接受一个整数偏移量,并在关联数组上工作。 你可以用它来定时(并设置)第n个键。

 // This will at most allocate 2 temporary arrays of 1 element each $key = array_keys(array_slice($array, $n, 1, true))[0]; $array[$key] = $value;