데이터 구조 - 배열(array)
배열은 연속적인 방식으로 데이터를 저장하고 인덱싱을 통해 액세스할 수 있는 구조입니다. PHP 배열과 혼동하지 마십시오. PHP 배열은 실제로 순서가 지정된 해시 테이블로 구현됩니다.
SplFixedArray와 PHP 배열의 주요 차이점:
SplFixedArray는 고정 길이 표준(표준 배열)이며 범위 내의 정수만 인덱스로 허용합니다. 장점은 더 빠른 어레이 구현이 가능하다는 것입니다.
PHP 배열은 실제로 순서가 지정된 해시 테이블(데이터 모음)로 구현됩니다. <?php<br />
<br />
/*<br />
构造一个新的固定数组,指定长度为5<br />
*/<br />
$array = new SplFixedArray(5);<br />
<br />
/*<br />
为指定的索引赋值<br />
*/<br />
$array[1] = 2;<br />
$array[4] = "foo";<br />
<br />
/*<br />
数据结构:<br />
object(SplFixedArray)#1 (5) {<br />
[0]=><br>
NULL<br>
[1]=><br>
int(2)<br>
[2]=><br>
NULL<br>
[3]=><br>
NULL<br>
[4]=><br>
string(3) "foo"<br>
}<br>
*/<br>
var_dump($array);<br>
<br>
/*<br>
数组长度为5<br>
*/<br>
var_dump($array->count());<br>
<br>
/*<br>
将数组的大小增加到10<br>
*/<br>
$array->setSize(10);<br>
<br>
/*<br>
长度增加的数组,原始数据不会发生变化<br>
object(SplFixedArray)#1 (10) {<br>
[0]=><br>
NULL<br>
[1]=><br>
int(2)<br>
[2]=><br>
NULL<br>
[3]=><br>
NULL<br>
[4]=><br>
string(3) "foo"<br>
[5]=><br>
NULL<br>
[6]=><br>
NULL<br>
[7]=><br>
NULL<br>
[8]=><br>
NULL<br>
[9]=><br>
NULL<br>
}<br>
<br>
*/<br>
var_dump($array);<br>
<br>
/*<br>
为扩充长度后的数组赋值<br>
*/<br>
$array[9] = "asdf";<br>
<br>
<br>
/*<br>
将数组缩小到2的大小<br>
将从索引开始处,保存两个长度<br>
object(SplFixedArray)#1 (2) {<br>
[0]=><br>
NULL<br>
[1]=><br>
int(2)<br>
}<br>
*/<br>
$array->setSize(2);<br>
<br>
<br>
<br>
/*<br>
以下行抛出一个RuntimeException:索引无效或超出范围<br>
*/ <br>
try {<br>
$array["username"]="jack";<br>
} catch(RuntimeException $re) {<br>
/*<br>
RuntimeException: Index invalid or out of range<br>
索引只能是整数<br>
*/<br>
echo "RuntimeException: ".$re->getMessage()."n"; <br>
}<br>
<br>
try {<br>
$array[-1]="jack";<br>
} catch(RuntimeException $re) {<br>
/*<br>
RuntimeException: Index invalid or out of range<br>
索引不合法<br>
*/<br>
echo "RuntimeException: ".$re->getMessage()."n";<br>
}<br>
<br>
try {<br>
$array[5]="jack";<br>
} catch(RuntimeException $re) {<br>
/*<br>
RuntimeException: Index invalid or out of range<br>
索引超出数组长度<br>
*/<br>
echo "RuntimeException: ".$re->getMessage()."n";<br>
}<br>
<br>
/*<br>
查看数组大小<br>
getSize/count <br>
*/<br>
echo $array->getSize();<br>
?>
/*
지정된 길이가 5인 새로운 고정 배열을 생성합니다
*/
$array = 새로운 SplFixedArray(5);
/*
지정된 인덱스에 값 할당
*/
$array[1] = 2;
$array[4] = "foo";
/*
데이터 구조:
객체(SplFixedArray)#1 (5) {
[0]=>
NULL
[1]=>
정수(2)
[2]=>
NULL
[3]=>
NULL
[4]=>
문자열(3) "foo"
}
*/
var_dump($array);
/*
배열 길이는 5
*/
var_dump($array->count());
/*
배열 크기를 10으로 늘립니다
*/
$array->setSize(10);
/*
배열의 길이가 늘어나도 원본 데이터는 변경되지 않습니다
객체(SplFixedArray)#1 (10) {
[0]=>
NULL
[1]=>
정수(2)
[2]=>
NULL
[3]=>
NULL
[4]=>
문자열(3) "foo"
[5]=>
NULL
[6]=>
NULL
[7]=>
NULL
[8]=>
NULL
[9]=>
NULL
}
*/
var_dump($array);
/*
확장 배열에 값 할당
*/
$array[9] = "asdf";
/*
배열을 크기 2로 축소
인덱스 시작 부분부터 두 길이를 저장합니다.
객체(SplFixedArray)#1 (2) {
[0]=>
NULL
[1]=>
정수(2)
}
*/
$array->setSize(2);
/*
다음 줄에서는 RuntimeException이 발생합니다. 인덱스가 유효하지 않거나 범위를 벗어났습니다.
*/
시도해보세요 {
$array["username"]="jack";
} catch(RuntimeException $re) {
/*
RuntimeException: 인덱스가 유효하지 않거나 범위를 벗어났습니다
인덱스는 정수만 가능합니다
*/
echo "RuntimeException: ".$re->getMessage()."n"
}
시도해보세요 {
$array[-1]="잭";
} catch(RuntimeException $re) {
/*
RuntimeException: 인덱스가 유효하지 않거나 범위를 벗어났습니다
색인이 잘못되었습니다
*/
echo "RuntimeException: ".$re->getMessage()."n";
}
시도해보세요 {
$array[5]="잭";
} catch(RuntimeException $re) {
/*
RuntimeException: 인덱스가 잘못되었거나 범위를 벗어났습니다
인덱스가 배열 길이를 초과합니다
*/
echo "RuntimeException: ".$re->getMessage()."n";
}
/*
배열 크기 보기
크기/개수
*/
echo $array->getSize();
?>
<🎜>
$data=[1 => 1, 0 => 2, 3 =>
$sfa = SplFixedArray::fromArray($data);
/*
객체(SplFixedArray)#1 (4) {
[0]=>
정수(2)
[1]=>
정수(1)
[2]=>
NULL
[3]=>
정수(3)
}
*/
var_dump($sfa);
$data=[1 => 1, 2 => 2, true =>3,5=>5];$sfa = SplFixedArray::fromArray($data);
/*
1 true가 1로 변환되고, 인덱스 1의 데이터가 3으로 변경됩니다
2 기본적으로 원본 인덱스가 저장되며, 인덱스는 0부터 시작됩니다. 데이터가 없을 경우 기본값은 NULL입니다
객체(SplFixedArray)#2 (6) {
[0]=>
NULL
[1]=>
정수(3)
[2]=>
정수(2)
[3]=>
NULL
[4]=>
NULL
[5]=>
정수(5)
}
*/
var_dump($sfa);
$data=[1 => 1, 2 => 2, true =>3,5=>5];
$sfa = SplFixedArray::fromArray($data,false);
/*
1 원본 배열에 사용된 숫자 인덱스를 저장해 보세요. 기본값은 true입니다.
2 원래 숫자 인덱스를 저장하지 않으면 NULL이 아닌 배열이 반환됩니다.
객체(SplFixedArray)#1 (3) {
[0]=>
정수(3)
[1]=>
정수(2)
[2]=>
정수(5)
}
*/
var_dump($sfa);
$data=[1 => 1, 'a' => 2, true =>
/*
인덱스는 정수여야 합니다
치명적인 오류: '배열은 양의 정수 키만 포함해야 합니다'라는 메시지와 함께 포착되지 않은 예외 'InvalidArgumentException'
*/
//$sfa = SplFixedArray::fromArray($data);
?>