我想使用键/值对的数组索引设置关联数组的值.例如:
$my_arr = array( "bling" => "some bling", "bling2" => "lots O bling" );
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
Run Code Online (Sandbox Code Playgroud)
如何在不使用密钥字符串的情况下实现此目的?
Don*_*van 179
使用array_keys.
$keys = array_keys($my_arr);
$my_arr[$keys[1]] = "not so much bling";
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Gor*_*don 25
数字和关联索引键之间没有相关性.
当你说你要使用的键/值的数组索引设置关联数组的值,那么你必须使用指定的键,设置$array[1]
是不一样的设定$array['foo']
.
考虑这个数组
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
Run Code Online (Sandbox Code Playgroud)
这会给
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
Run Code Online (Sandbox Code Playgroud)
foo是数组中的第二个元素.这是偏移量,但它与索引1无关.如您所见,在上面的数组中,索引1与之关联baz
.假设只是因为foo
它是与实际数字键1有关的第一个关联键是错误的.就像some
不与2相关.
同样,对于如上所示的混合数组,array_keys
本网站其他地方建议的解决方案将无效,因为
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
Run Code Online (Sandbox Code Playgroud)
会给
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
Run Code Online (Sandbox Code Playgroud)
所以,当你这样做时,$array[$keys[1]]
你真的在做$array['foo']
.但是如果你想访问那个数组('some'
)中的第二个关联值,你就不能这样做,$array[$keys[2]]
因为那会评估到$array[1]
那个baz
.
元素的偏移量与其键或值完全无关
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
Run Code Online (Sandbox Code Playgroud)
真正意思
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
Run Code Online (Sandbox Code Playgroud)
这意味着偏移0处的元素是foo,虽然它的关键是100.如果要通过偏移量从数组中提取元素,则必须使用
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
Run Code Online (Sandbox Code Playgroud)
这将创建一个仅在第三个位置保持元素的数组.
或者你可以使用ArrayIterator
.在ArrayIterator
实现了一个Seekable
接口,可以让你寻找到特定位置/数组中的偏移量,然后获取该:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value
Run Code Online (Sandbox Code Playgroud)
Ric*_*ing 16
虽然array_keys()
允许访问第n个键,但array_values
会给你第n个值.
<?php
$array = [
0 => 'Zero',
'1' => 'One',
'Two' => 'Two',
];
echo array_values($array)[2];
?>
Run Code Online (Sandbox Code Playgroud)
将输出'Two'.
一个优于另一个有优势吗?好吧,我能看到的唯一一个次要的是数组访问次数.
有了array_keys()
你需要3.
有了array_values()
,你只需要2.
但是,另一方面,密钥通常较小,数据可能非常嵌套,因此,总的来说,使用密钥array_keys()
可能更安全.
如果数组很大,那么 和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;
Run Code Online (Sandbox Code Playgroud)