>  기사  >  백엔드 개발  >  PHP 배열 사용 방법 요약

PHP 배열 사용 방법 요약

伊谢尔伦
伊谢尔伦원래의
2017-06-22 17:59:351526검색

배열 사용
배열은 일련의 값을 저장할 수 있는 변수입니다. 배열은 많은 요소를 가질 수 있습니다. 각 요소에는 텍스트, 숫자 또는 다른 배열과 같은 값이 있습니다. 다른 배열을 포함하는 배열을 다차원 배열이라고 합니다.

배열이란 무엇인가요?
스칼라 변수는 값을 저장하는 데 사용되는 명명된 영역입니다. 마찬가지로 배열은 일련의 변수 값을 저장하는 데 사용되는 명명된 영역이므로 배열을 사용하여 스칼라 변수를 구성할 수 있습니다.
배열에 저장된 값을 배열 요소라고 합니다. 각 배열 요소에는 해당 요소에 액세스하는 데 사용할 수 있는 관련 인덱스(키라고도 함)가 있습니다. 대부분의 프로그래밍 언어에서 배열에는 숫자 인덱스가 있으며 이러한 인덱스는 일반적으로 0 또는 1에서 시작합니다.

숫자 인덱스 배열
PHP에서는 숫자 인덱스의 기본값이 0부터 시작하지만 물론 변경할 수 있습니다.
1. 숫자 인덱스 배열 초기화
$porducts = array('Tires', 'Oil', 'Spark Plugs');
echo 문과 마찬가지로 array()는 실제로 함수가 아닌 언어 구성입니다.
배열 내용 요구 사항에 따라 위의 예처럼 수동으로 초기화할 필요가 없을 수도 있습니다. 필요한 데이터가 다른 배열에 보관된 경우 "=" 연산자를 사용하여 해당 배열을 다른 배열로 복사할 수 있습니다. 숫자를 오름차순으로 배열에 저장해야 하는 경우 range() 함수를 사용하여 이 배열을 자동으로 만들 수 있습니다. 다음 코드 줄은 1부터 10까지의 숫자 배열을 만듭니다. $numbers = range(1,10); range() 함수에는 값 사이의 단계를 설정할 수 있는 선택적인 세 번째 매개변수가 있습니다. 예를 들어, 1과 10 사이의 홀수 배열을 생성해야 하는 경우 다음 코드를 사용할 수 있습니다. $odds = range(1,10,2); range() 함수는 다음과 같은 문자에도 작동할 수 있습니다. : $letters = range ('a', 'z');
2. 배열의 내용에 액세스
변수의 내용에 액세스하려면 해당 이름을 직접 사용할 수 있습니다. 변수가 배열인 경우 변수 이름과 키워드 또는 인덱스의 조합을 사용하여 해당 내용에 액세스할 수 있습니다. 키워드나 인덱스는 우리가 접근하려는 변수를 지정합니다. 인덱스는 변수 이름 뒤에 대괄호로 묶입니다.
기본적으로 요소 0은 배열의 첫 번째 요소입니다.
PHP의 문자열 구문 분석 기능은 매우 강력하고 스마트하지만 혼란을 야기할 수 있다는 점에 유의하세요. 큰따옴표 안에 문자열에 배열이나 기타 변수를 포함할 때 올바르게 해석되지 않으면 큰따옴표 밖에 두거나 4장의 "
정규식을 사용한 문자열 연산
"을 찾아 더 복잡한 구문을 얻을 수 있습니다.
PHP의 다른 변수와 마찬가지로 배열도 사전 초기화하거나 생성할 필요가 없습니다. 처음 사용할 때 자동으로 생성됩니다. 3. 루프를 사용하여 배열에 액세스 배열은 정렬된 숫자를 인덱스로 사용하므로 for 루프를 사용하여 배열의 내용을 쉽게 표시할 수 있습니다.
for ($i=0; $i3b8cf1849e2e57226c8f082910a774c7100, 'Oil'=> 10 , 'Spark Plugs'=>4 );
키워드와 값 사이의 기호는 보다 큼 기호와 등호일 뿐입니다.
2 배열 요소 액세스
마찬가지로 배열의 내용은 변수 이름과 키워드를 사용하여 액세스할 수 있습니다. 예를 들어 $prices['타이어'].
3 루프 문을 사용하세요
해당 배열의 인덱스가 숫자가 아니기 때문에 for 루프 문에서는 단순 카운터를 사용하여 배열에 대한 연산을 수행하는 것이 불가능합니다. 그러나 foreach 루프나 list() 및 Each() 구조를 사용할 수 있습니다.
foreach() 루프는 foreach 루프 문을 사용하여 관련 배열에 대해 작동할 때 구조가 다릅니다. 키워드는 다음과 같이 사용할 수 있습니다:

foreach ($prices as $key => $value)
echo $key.&#39;=>&#39;.$value.&#39;<br />&#39;;
如下所示的代码将使用each()结构打印$prices数组的内容:
while( $element = each($prices))
{
echo $element[&#39;key&#39;];
echo &#39; - &#39;;
echo $element[&#39;value&#39;];
echo &#39;<br />&#39;;
}

each() 함수는 배열의 현재 요소와 다음 요소를 현재 요소로 반환합니다. Each() 함수는 while 루프에서 호출되기 때문에 배열의 각 요소를 순서대로 반환하고 배열의 끝에 도달하면 루프 작업이 종료됩니다.
이 코드에서 $element 변수는 배열입니다. Each()가 호출되면 4개의 숫자 값과 배열 위치를 가리키는 4개의 인덱스가 있는 배열을 반환합니다. 위치 키와 0은 현재 요소의 키를 포함하고, 위치 값과 1은 현재 요소의 값을 포함합니다. 어떤 방법을 선택하든 차이는 없지만 숫자로 색인된 위치보다는 이름이 지정된 위치를 사용하기로 선택했습니다.
또한 동일한 작업을 수행하는 더 발전되고 일반적인 방법이 있습니다. list() 함수를 사용하면 배열을 일련의 값으로 분해할 수 있습니다. Each() 함수에서 반환된 두 값은 다음과 같이 구분할 수 있습니다. list( $product, $price) = Each( $price)
위 코드는 $에서 현재 요소를 꺼내기 위해 각각()을 사용합니다. 가격 배열을 추가하고 배열로 반환된 후 다음 요소를 가리킵니다. 또한 list()를 사용하여 Each()에서 반환된 배열에 포함된 두 요소 0과 1을 $product 및 $price라는 두 개의 새 변수로 변경합니다.
전체 $prices 배열을 반복하고 다음과 같은 짧은 스크립트를 사용하여 해당 내용을 표시할 수 있습니다.

while(list($prodct, $pirce) = each($prices))
echo "$product - $price<br />";

이 코드의 출력은 이전 스크립트의 출력과 동일하지만 목록 때문에 읽기가 더 쉽습니다. () 새 변수의 이름을 지정할 수 있습니다.
한 가지 주의할 점은 Each() 함수를 사용할 때 배열이 현재 요소를 기록한다는 것입니다. 동일한 스크립트에서 배열을 두 번 사용하려면 Reset() 함수를 사용하여 현재 요소를 배열의 시작 부분으로 재설정해야 합니다. 가격 배열을 다시 반복하려면 다음과 같은 코드를 사용할 수 있습니다:
reset($prices);
while(list($product, $price) = Each($prices))
echo "$product - $pricee0242e5ca1c5dfb01b04b39de0809dbb는 동일하지 않음, !==는 동일하지 않습니다.
합집합 연산자는 $b의 요소를 $a의 끝에 추가하려고 합니다. $b의 요소가 $a의 일부 요소와 동일한 인덱스를 갖는 경우 해당 요소는 추가되지 않습니다. 즉, $a의 요소는 덮어쓰이지 않습니다.

다차원 배열
배열은 키와 값의 단순한 목록일 필요는 없습니다. 배열의 각 위치는 다른 배열을 보유할 수도 있습니다. 이 방법을 사용하면 2차원 배열을 만들 수 있습니다. 2차원 배열은 행렬, 너비와 높이 또는 행과 열이 있는 네트워크로 생각할 수 있습니다.

배열 정렬
1 sort() 함수를 사용하세요.
sort() 함수는 대소문자를 구분합니다. 모든 대문자는 소문자 앞에 나타납니다. 따라서 'A'는 'Z'보다 작고, 'Z'는 'a'보다 작습니다.
함수의 두 번째 매개변수는 선택사항입니다. 이 선택적 매개변수는 SORT_REGULAR(기본값), SORT_NUMERIC 또는 SORT_STRING으로 전달될 수 있습니다. 정렬 유형을 지정하는 기능은 예를 들어 숫자 2와 12가 포함된 문자열을 비교할 때 유용합니다. 수학적 관점에서 보면 2는 12보다 작지만 문자열로 보면 '12'는 '2'보다 작습니다.
2 관련 배열을 정렬하려면 asort() 함수와 ksort() 함수를 사용하세요.
asort() 함수는 배열의 각 요소 값을 기준으로 정렬합니다. ksort() 함수는 값이 아닌 키워드를 기준으로 정렬합니다.
3 역정렬
rsort() 함수는 1차원 숫자 인덱스 배열을 내림차순으로 정렬하는 함수입니다. arsort() 함수는 1차원 연관 배열을 각 요소 값의 내림차순으로 정렬합니다. krsort() 함수는 1차원 배열을 배열 요소의 키에 따라 내림차순으로 정렬합니다.
1차원 배열의 데이터에 액세스하려면 배열 이름과 요소의 인덱스를 사용해야 합니다. 2차원 배열은 요소에 행과 열이라는 두 개의 인덱스가 있다는 점을 제외하면 1차원 배열과 유사합니다. .
이중 for 루프를 사용하면 동일한 효과를 얻을 수 있습니다.

for ( $row=0; $row<3; $row++ )
{
for ( $column=0; $column<3; $column++ )
{
echo &#39;|&#39;.$products[$row][$column];
|
echo &#39;|<br />&#39;;
}

이 코드를 대규모 배열에 사용하면 훨씬 간단해집니다.
숫자 대신 열 이름을 만드는 것이 더 좋을 수도 있습니다. 다음과 같은 코드를 사용할 수 있습니다.

$products = array ( array ( &#39;Code&#39;=>&#39;TIR&#39;, &#39;Descrīption&#39;=>&#39;Tires&#39;, &#39;Price&#39;=>100 ), array ( &#39;Code&#39;=>&#39;OIL&#39;, &#39;Descrīption&#39;=>&#39;Oil&#39;, &#39;Price&#39;=>10 ), array ( &#39;Code&#39;=>&#39;SPK&#39;, &#39;Descrīption&#39;=>&#39;Spark Plugs&#39;, &#39;Price&#39;=>4 ) };

단일 값을 검색하려는 경우 이 배열을 사용하는 것이 훨씬 쉬울 것입니다. 설명하는 내용을 소위 첫 번째 열에 저장할 때보다 그 이름을 딴 열에 저장할 때 더 쉽게 기억할 수 있습니다. 설명적 인덱싱을 사용하면 요소가 [x][y] 위치에 저장되어 있다는 사실을 기억할 필요가 없습니다. 행과 열 이름의 의미 있는 쌍을 인덱스로 사용하면 필요한 데이터를 쉽게 찾을 수 있습니다.
그러면 간단한 for 루프를 사용하여 각 열을 순서대로 반복할 수 없습니다. for 루프를 사용하여 숫자로 인덱스된 외부 배열 $products를 반복할 수 있습니다. $products 배열의 각 행은 설명 인덱스가 있는 배열입니다. while 루프에서 각각() 및 list() 함수를 사용하면 전체 내부 배열을 탐색할 수 있습니다. 따라서 내부에 while 루프가 내장된 for 루프가 필요합니다.

for ( $row = 0; $row < 3; $row++ }
{
while ( list ( $key, $value ) = each ( $products[$row] ) )
{
echo "|$value";
}
echo &#39;|<br />&#39;;
}

三维数组具有高、宽、深的概念。如果能轻松地将一个二维数组想像成一个有行和列的表格,那么就可以将三维数组想像成一堆像这样的表格。每个元素可以通过层、行和列进行引用。
根据创建多维数组的方法,可以创建四维、五维或六维数组。在PHP中,并没有设置数组维数的限制,但人们很难设想一个多于三维的数组。大多数的实际问题在逻辑上只需要使用三维或者更少维的数组结构就可以了。

多维数组的排序
对 多于一维的数组进行排序,或者不按字母和数字的顺序进行排,要复杂得多。PHP知道如何比较两个数字或字符串,但在多维数组中,每个元素都是一个数组。 PHP不知道如何比较两个数组,所以需要建立一个比较它们的方法。在大多数情况下,单词和数字的顺序是显而易见的——但对于复杂的对象,问题就会多一些。
1 用户定义排序
usort()中的“u”代表“user”,因为这个函数要求传入用户定义的比较函数。asort和ksort对应的版本uasort()和uksort()也要求传入用户定义的比较函数。
类似于asort(),当对非数字索引数组的值进行排序时,uasort()才会被使用。如果值是简单的数字或文本则可以使用asort。如果要比较的值像数组一样复杂,可以定义一个比较函数,然后使用uasort()。
类似于ksort(),当对非数字索引数组的关键字进行排序时才使用uksort()。如果值是简单的数字或文本就使用ksort。如果要比较的对象像数组一样复杂,可以定义一个比较函数,然后使用uksort()。
2 反向用户排序
函数sort()、asort()和ksort()都分别对应一个带字母“r”的反向排序函数。用户定义的排序没有反向变体,但可以对一个多维数组进行反向排序。

对数组进行重新排序
1 使用shuffle()函数
在PHP的早期版本中,shuffle()要求调用srand()函数时首先提供一个随机数生成器。如今,这个步骤已经不再需要了。
如果这个函数对你非常重要,可以在程序中应用该函数之前在服务器上测试它。
由于并不需要真正重新排序整个数组,使用array_rand()函数可以实现相同的功能。
2 使用array_reverse()函数
array_reverse()函数使用一个数组作参数,返回一个内容与参数数组相同但顺序相反的数组。
因为单独使用range()函数将创建一个升序序列,所以必须使用sort()函数或array_reverse()函数将数组中的数字变为降序。或者,也可以使用for循环通过一次一个元素的方式创建这个数组。如:

$numbers = array();
for ($i=10; $i>0; $i--)
array_push( $numbers, $i );

一个for循环可以像这样按降序方式运行。可以将计数器
一个for循环可以像这样按降序方式运行。可以将计数器的初始值设为一个大数,在每次循环末尾使用运算符“--”将计数器减1。
在这里,我们创建了一个空数组,然后使用array_push()函数将每个新元素添加到数组的末尾。请注意,和array_push()相反的函数是array_pop(),这个函数用来删除并返回数组末尾的一个元素。
或者,也可以使用array_reverse()函数将由range()函数所创建的数组进行反向排序。
请注意,array_reverse()函数将返回一个原数组修改后的副本。如果不再需要原来的数组,比如在这个例子中,可以用新的副本覆盖原来的版本。
如果数据只是一系列的整数,可以通过将-1作为range()函数的第三个可选调参数,以相反的顺序创建该数组。

从文件载入数组
使用file()函数将整个文件载入一个数组中。文件中的每行则成为数组中的一个元素。使用了count()函数来统计数组中的元素个数。
explode("\t", $orders[$i])
explode()函数可以将传入的字符串分割成一个个小块。每个制表符成为两个元素之间的断点。这个函数的可选参数limit可以用来限制被返回的最大块数。
可以使用许多方法从字符串中提取数字。在这里,我们使用了intval()函数。它可以将一个字符串转化成一个整数。这个转换是相当智能化的,它可以忽略某些部分,例如标签就不能转换成数字。

执行其他的数组操作
1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev()
前面已经提到,每个数组都有一个内部指针指向数组中的当前元素。当使用函数each()时,就间接地使用了这个指针,但是也可以直接使用和操作这个指针。
如果创建一个新数组,那么当前指针就将被初始化,并指向数组的第一个元素。
调用next()或each()将使指针前移一个元素。调用each($array_name)会在指针前移一个位置之前返回当前元素。next()函数则有些不同——调用next($array_name)是将指针前移,然后再返回新的当前元素。
调用end($array_name)可以将指针移到数组末尾。
要反向遍历一个数组,可以使用end()和prev()函数。prev()函数和next()函数相反。它是将当前指针往回移一个位置然后再返回新的当前元素。
2 对数组的每一个元素应用任何函数:array_walk()
array_walk()函数需要三个参数。第一个是arr,也就是需要处理的数组。第二个是func,也就是用户自定义并将作用于数组中每个元素的函数。第三个参数userdata是可选的,如果使用它,它可以作为一个参数传递给我们自己的函数。
看一个销微复杂点的例子:

function my_multiply(&$value, $key, $factor)
{
$value *= $factor;
}
array_walk(&$array, &#39;my_multiply&#39;, 3);

在这里,我们定义了一个名为my_multiply()的函数,它可以用所提供的乘法因子去乘以数组中的每个元素。
此外,还有一个需要注意的问题是传递毵数$value的方式。在my_multiply()的函数定义中,变量前面的地址符(&)意味着$value是按引用方式传递的。按引用方式传递允许函数修改数组的内容。
3 统计数组元素个数:count()、sizeof()和array_count_values()
count()函数和sizeof()函数具有同样的用途,都可以返回数组元素的个数。可以得到一个常规标量变量中的元素个数,如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组个数就是0。
如 果调用array_count_values($array),这个函数将会统计每个特定的值在数组$array中出现过的次数(这就是数组的基数集)。 这个函数将返回一个包含频率表的相关数组。这个数组包含数组$array中的所有值,并以这些值作为相关数组的关键字。每个关键字所对应的数值就是关键字 在数组$array中出现的次数。
4 将数组转换成标量变量:extract()
对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract()将它们转换成一系列的标量变量。
函数extract()的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。
extract()函数具有两个可选参数:extract_type和prefix。变量extract_type将告诉extract()函数如何处理冲突。有时可能已经存在一个和数组关键字同名的变量,该函数的默认操作是覆盖已有的变量。
两个最常用的选项是EXTR_OVERWRITE(默认值)和EXTR_PREFIX_ALL。当知道会发生特定的冲突并且希望跳过该关键字或要给它加上前缀时,可能会用到其他选项。
extract()可以提取出一个元素,该元素的关键字必须是一个有效的变量名称,这就意味着以数字开始或包含空格的关键字将被跳过。

위 내용은 PHP 배열 사용 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.