[php] 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.

키 문자열을 사용하지 않고 어떻게이 작업을 수행 할 수 있습니까?



답변

array_keys를 사용하십시오 .

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

도움이 되었기를 바랍니다.


답변

숫자 키와 연관 색인 키 사이에는 상관 관계가 없습니다.

key / value의 배열 인덱스를 사용하여 연관 배열의 값설정 하려면 주어진 키를 사용해야하며 설정 $array[1]은 setting과 동일하지 않습니다 $array['foo'].

이 배열 고려

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

이것은 줄 것이다

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

foo는 배열의 두 번째 요소입니다. 이것이 offset 이지만 인덱스 1과는 아무런 관련이 없습니다. 보시다시피 위의 배열에서 인덱스 1은 baz. foo첫 번째 연관 키 이기 때문에 실제 숫자 키 1과 관련이 있다고 가정하는 것은 잘못되었습니다 some.

마찬가지로 위에 표시된 것과 같은 혼합 배열의 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의 요소는 키가 100이지만 foo입니다. 오프셋으로 배열에서 요소를 추출하려면 다음을 사용해야합니다.

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

이렇게하면 세 번째 위치에 요소 만있는 배열이 생성됩니다.

또는 ArrayIterator. ArrayIterator구현하는 Seekable특정 위치로 탐색 할 수 있습니다 인터페이스는 / 배열의 오프셋 (offset)하고 있음을 가져 오기 :

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


답변

array_keys()n 번째 키에 대한 액세스를 허용 하는 동안 array_valuesn 번째 값을 제공합니다.

<?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()것이 더 안전 할 수 있습니다.


답변

어레이는 큰 두 경우 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;


답변

이 시도. 그것은 당신을 위해 작동합니다.

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


답변

또 다른 가능성은 일반 배열로 변환하는 것입니다.

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

여기서 “~~~”는 데이터에서 발생하지 않는 구분 기호입니다.

이제 오프셋과 동일한 숫자 인덱스를 사용하여 배열에 액세스 할 수 있습니다.

여전히 연관 배열을 유지해야하는 경우 다른 변수에 할당하기 만하면됩니다.


답변