IT

PHP의 정수 인덱스를 사용하여 연결 배열 액세스

itgroup 2023. 1. 21. 09:43
반응형

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"; 

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

키/값의 배열 인덱스를 사용하여 연관 배열 값을 설정하는 경우 지정된 키를 사용해야 합니다.$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']다만, 그 어레이내의 제2의 관련치에 액세스 하고 싶은 경우('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

한편array_keys()n번째 키에 대한 접근을 허용합니다.array_valuesn번째 값이 표시됩니다.

<?php
$array = [
   0     => 'Zero',
   '1'   => 'One',
   'Two' => 'Two',
];
echo array_values($array)[2];
?>

는 '2'를 출력합니다.

한쪽이 다른 쪽보다 유리합니까?다만, 어레이 액세스의 수 밖에 알 수 없습니다.

와 함께array_keys()3번 해야 돼요.

  1. 데이터 배열에서 키를 가져옵니다.
  2. 키 목록에서 n번째 키를 가져옵니다.
  3. 데이터 배열에서 n번째 키를 사용하여 값을 가져옵니다.

와 함께array_values()2개만 있으면 됩니다.

  1. 데이터 배열에서 값을 가져옵니다.
  2. 값 목록에서 n번째 값을 가져옵니다.

중첩될 수 종합적으로 가 작을 경우, 키가 너무 작을 수 있습니다.따라서 전체적으로는array_keys()아마 더 안전할 거예요

클 둘 다 [어느 쪽도]를 선택합니다.array_keys ★★★★★★★★★★★★★★★★★」array_valuesn번째 키(또는 값)를 얻기 위해서만 원래와 같은 크기의 새 어레이를 할당하기 때문에 낭비가 됩니다.

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 = innode ~~",$my_arr);
my_ar = 브레이크스토어~", $arraybuff);

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

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

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

언급URL : https://stackoverflow.com/questions/4769148/accessing-an-associative-array-by-integer-index-in-php

반응형