在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一个只包含第三个位置的元素的数组。
或者你可以使用一个ArrayIterator
。 ArrayIterator
实现了一个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。
- 从数据数组中获取密钥。
- 从键列表中获取第n个键。
- 使用数据数组中的第n个键获取值。
用array_values()
,你只需要2。
- 从数据数组中获取值。
- 从值列表中获取第n个值。
但是,另一方面,键通常更小,数据可以嵌套很大,所以总的来说,使用array_keys()
可能更安全。
另一种可能性是将其转换为一个正常的数组:
$ arraybuff = implode(“~~~”,$ my_arr);
$ my_arr = explode(“~~~”,$ arraybuff);
其中“~~~”是不会在您的数据中出现的分隔符。
现在您可以使用等于偏移的数字索引来访问数组。
如果您仍然需要保留您的关联数组,只需将其分配给一个不同的variables。
尝试这个。 它适合你。
$result= array_values($my_arr); // Array with indexes you need
如果数组很大,那么array_keys
和array_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;