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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

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

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

如何在不使用密钥字符串的情况下做到这一点?

提问于
用户回答回答于
用户回答回答于

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

当你说你想使用键/值的数组索引设置关联数组的值时,则必须使用给定的键,设置$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本网站中其他地方提出的解决方案也不适用,因为

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

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

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

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

扫码关注云+社区