Looking for php Keywords? Try Ask4Keywords

PHP SplFixedArray


PHP 배열과의 차이점

PHP의 기본 배열 유형은 실제로 주문 된 해시 맵으로 구현됩니다.이 배열을 사용하면 값이 모든 유형이 될 수 있고 키는 숫자 또는 문자열 일 수있는 키 / 값 쌍으로 구성된 배열을 만들 수 있습니다. 그러나 이것은 전통적으로 배열이 어떻게 생성되는지는 아닙니다.

Traditional PHP Array 그림 1

이 그림에서 알 수 있듯이 일반적인 PHP 배열은 정렬 된 키 / 값 쌍의 집합처럼 볼 수 있습니다. 각 키는 각 값에 매핑 할 수 있습니다. 이 배열에는 숫자와 문자열 인 키와 다른 유형의 값이 있으며 키에는 요소의 순서가 없습니다.

$arr = [
    9     => "foo",
    1     => 4.2,
    "bar" => null,
];

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

따라서 위의 코드는 우리가 기대하는 바를 정확히 알려줄 것입니다.

9 => foo
1 => 4.2
bar => 

정규 PHP 배열은 동적으로 크기가 조정됩니다. 자동으로 어레이에서 값을 가져 오거나 값을 어레이로 가져 오면 값이 커지고 줄어 듭니다.


그러나 전통적인 배열에서는 크기가 고정되어 있으며 전적으로 동일한 유형의 값으로 구성됩니다. 또한 키가 아닌 각 값은 해당 인덱스에 의한 액세스입니다.이 값은 배열의 오프셋을 통해 추론 할 수 있습니다.

SplFixedArray 그림 2

우리는 주어진 타입의 사이즈 및 오프셋 배열의 고정 크기를 알고있는 것이기 때문에 다음이다 type size * n 이었다 n 배열의 값의 위치를 나타낸다. 그래서 위의 예제에서 $arr[0] 은 우리에게 1 주고, 배열의 첫번째 요소와 $arr[1]2 줍니다.

그러나 SplFixedArray는 값 유형을 제한하지 않습니다. 키를 숫자로만 제한합니다. 고정 된 크기입니다.

이것은 SplFixedArrays를 일반 PHP 배열보다 한 가지 특별한 방법으로 더 효율적으로 만듭니다. 그들은 더 조밀해서 더 적은 메모리가 필요합니다.

배열 인스턴스화

SplFixedArray는 객체로 구현되지만 ArrayAccess 인터페이스를 구현하기 때문에 일반 PHP 배열에 액세스하는 익숙한 구문으로 액세스 할 수 있습니다. 또한 CountableIterator 인터페이스를 구현하여 PHP에서 동작하는 배열 (즉, count($arr)foreach($arr as $k => $v) 같은 방식으로 사용하는 것과 동일한 방식으로 작동합니다. SplFixedArray는 PHP에서 일반적인 배열을 처리합니다.

SplFixedArray 생성자는 배열 크기 인 인수 하나를 취합니다.

$arr = new SplFixedArray(4);

$arr[0] = "foo";
$arr[1] = "bar";
$arr[2] = "baz";

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

이것은 당신이 기대할 수있는 것을 당신에게줍니다.

0 => foo
1 => bar
2 => baz
3 => 

이것은 예상대로 작동합니다.

var_dump(count($arr));

우리에게 주어지다...

int(4)

SplFixedArray는 일반적인 PHP 배열과는 달리, 키는 우리 배열의 요소 순서를 묘사합니다. 왜냐하면 이것은 맵이 아닌 진정한 인덱스 이기 때문입니다.

배열 크기 조정

배열의 크기가 고정되어 있으므로 count는 항상 동일한 값을 반환한다는 점을 명심하십시오. 따라서 unset($arr[1])$arr[1] === null 되고 count($arr) 는 여전히 4 남습니다.

배열의 크기를 변경하려면 setSize 메서드를 호출해야합니다.

$arr->setSize(3);

var_dump(count($arr));

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

이제 우리는 ...

int(3)
0 => foo
1 => 
2 => baz

SplFixedArray로 가져 오기 및 SplFixedArray에서 내보내기

fromArraytoArray 메서드를 사용하여 일반 PHP Array를 SplFixedArray 안팎으로 가져 오거나 내보낼 수도 있습니다.

$array      = [1,2,3,4,5];
$fixedArray = SplFixedArray::fromArray($array);

foreach($fixedArray as $value) {
    echo $value, "\n";
}
1
2
3
4
5

다른 방향으로가.

$fixedArray = new SplFixedArray(5);

$fixedArray[0] = 1;
$fixedArray[1] = 2;
$fixedArray[2] = 3;
$fixedArray[3] = 4;
$fixedArray[4] = 5;

$array = $fixedArray->toArray();

foreach($array as $value) {
    echo $value, "\n";
}
1
2
3
4
5