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

php
2022-08-30 07:43:22

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

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

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


答案 1

使用array_keys

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

答案 2

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

当你说你想使用键/值的数组索引来设置关联数组的值时,那么你必须使用给定的键,设置与set不同。$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 与 相关联。假设仅仅因为是第一个关联键,它与实际的数字键1有任何关系,这是错误的。就像不与2相关。bazfoosome

同样,对于如上所示的混合阵列,此站点上其他地方建议的解决方案将不起作用,因为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

这将创建一个数组,仅将元素保存在第三个位置。

或者,您可以使用 .实现了一个接口,允许您在数组中查找特定位置/偏移量,然后获取该接口:ArrayIteratorArrayIteratorSeekable

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

推荐