나는 꽤 오랫동안 array_search() 함수를 사용하여 배열의 값을 검색해 왔습니다. 루프에서 배열을 통해 검색하는 것보다 눈에 띄게 빠르다는 것을 듣고 읽었기 때문입니다. 더 빨랐다. 마침내 확인하고 계산하기 시작했습니다.

이 함수를 사용하여 배열에서 검색하는 속도를 foreach 및 while 루프에서 배열의 일반적인 반복과 비교했습니다. 10-100개의 배열 요소에서는 차이를 감지할 수 없으며 시간이 너무 짧아 무시할 수 있습니다. 그러나 대규모 어레이의 경우 그 차이가 상당히 큰 것으로 나타났습니다. 배열의 크기가 10배 증가함에 따라 검색 시간도 크게 증가했습니다. 100,000개의 요소에서 foreach는 0.013초로, 0.017초로 떨어졌고 array_search()도 느려졌지만 여전히 0.004초 더 빠른 속도를 유지했습니다. 큰 배열에서 작동하는 큰 스크립트의 경우 루프 검색을 array_search() 검색으로 바꾸는 것은 벼룩 최적화가 전혀 아닙니다.

이와 관련하여 저는 최근 직장 동료 중 한 사람과 프로그래머가 언어의 이러한 모든 내장 기능을 알아야 하는지 또는 "프로그래머 마인드"와 일반 지식이 충분한지에 대한 토론을 회상했습니다. 바로 이 사고방식에 대한 논의로 들어가지 않고, 나는 당신이 여전히 함수를 알아야 한다고 생각합니다. 아마도 모든 구문이 세부적으로는 아닐 수도 있지만, 적어도 거기에 어떤 함수가 있고 일반적인 용어로 무엇을 할 수 있는지 알아야 합니다.

UPD: 우리는 프로그래머 마인드가 필요합니다. 우리도 필요합니다! 그리고 기억력이 있는 마음챙김은 아프지 않을 것입니다(단절과 범위에서 영감을 얻었습니다.)

habrakat에서 시간을 계산한 스크립트 코드는 다음과 같습니다.

$mass=100000; // 검색할 배열의 값 수
$검색=50000; // 배열에서 이 값을 찾습니다.
$first_result=배열(); // 첫 번째 옵션의 평균값을 계산하기 위한 결과 배열
$second_result=배열(); // 두 번째 옵션의 평균값을 계산하기 위한 결과 배열
$third_result=배열(); // 세 번째 옵션의 평균값을 계산하기 위한 결과 배열

// 배열 생성 및 채우기
$test_array = 범위(0, $mass-1); // 감사합니다 SelenIT))

/*
$test_array=배열();
($i=0; $i에 대해<$mass; $i++)
{
$test_array=$i;
}
*/

// 평균 계산을 위한 루프
($d=0; $d에 대해<30; $d++) {

//**************** array_search로 검색 *******************

// 시간 계산 시작
$time_start = 마이크로타임(1);
// 검색
$key = array_search($search, $test_array, true);
// 찾은 경우
if ($key!==FALSE) // 첫 번째 요소의 수가 0이기 때문에 필수!==가 아니라!=
{
에코 $test_array[$key];
}
$time_end = 마이크로타임(1);
// 카운팅 시간 종료

// 값 배열에 쓰기
$first_result= $time_end - $time_start;

//***************** foreach 루프를 사용한 배열 검색 *******************

// 시간 계산 시작
$time_start = 마이크로타임(1);
// 스스로 검색
foreach($test_array를 $ta로)
{
if ($ta==$검색)
{
에코 $ta;
부서지다;
}
}
$time_end = 마이크로타임(1);
// 카운팅 시간 종료

// 값 배열에 쓰기
$second_result= $time_end - $time_start;

//***************** while 루프로 배열 검색 *******************

// 시간 계산 시작
$time_start = 마이크로타임(1);

// 배열의 길이 결정
$count=count($test_array);
$j=0;
// 스스로 검색
동안 ($j<$count)
{
if ($test_array[$j]==$search) // 찾은 경우
{
에코 $test_array[$j];
부서지다;
}
$j++;
}
$time_end = 마이크로타임(1);
// 카운팅 시간 종료

// 값 배열에 쓰기
$third_result= $time_end - $time_start;
}

$srednee1=array_sum($first_result)/count($first_result);
$srednee2=array_sum($second_result)/count($second_result);
$srednee3=array_sum($third_result)/count($third_result);

Printf("평균적으로 첫 번째 코드 실행: %.7f초", $srednee1);
printf("평균적으로 두 번째 코드 실행: %.7f초", $srednee2);
printf("평균적으로 3번째 코드 실행: %.7f초", $srednee3);

// 결과:
// 첫 번째 코드는 평균 0.0000295초 후에 실행됩니다.
// 평균 0.0153386초에 두 번째 코드 완료
// 세 번째 코드는 평균 0.0226001초 안에 완료됩니다.

배열로 작업할 때 기본 작업 중 하나는 특정 값을 찾는 것입니다. 이것이 PHP array_search() 함수의 용도입니다. 1차원 및 연관 컬렉션을 모두 처리할 수 있으며 배열에서 찾은 경우 조회 값의 키를 반환합니다.

통사론

PHP의 array_search() 함수에 대한 형식화된 설명은 다음과 같습니다.

혼합 array_search(혼합 값, 배열 $collection [, bool strict])

입력 매개변수:

  • $collection - 검색할 배열.
  • 값 - 모든 유형의 원하는 값.
  • strict는 엄격한 유형 인식 비교 메커니즘을 설정하는 선택적 부울 플래그입니다.

작동 메커니즘

PHP 함수 array_search()는 값을 컬렉션 배열의 모든 값과 차례로 비교합니다. 기본적으로 비교는 피연산자의 유형을 고려하지 않고 수행됩니다. 이 설정은 strict 플래그를 TRUE로 설정하여 변경할 수 있습니다. 문자열 비교는 대소문자를 구분합니다.

일치하는 항목을 찾으면 찾은 요소에 해당하는 키를 반환하고 함수를 종료합니다. 따라서 배열에서 원하는 값이 여러 번 발생하는 것을 감지하는 데 사용할 수 없습니다.

일치하는 항목이 없으면 함수는 부울 값 FALSE를 반환합니다.

완전 항등 연산자(===)를 사용하여 반환된 결과를 확인해야 합니다. 이는 함수가 0 또는 빈 문자열과 같이 FALSE로 평가되는 값을 반환할 수 있기 때문에 중요합니다.

사용 예

예제 1. PHP array_search() 함수에 다차원 배열을 전달할 때 작업 결과는 검색되는 요소의 키가 됩니다.

"겨울", "계절2" => "봄", "계절3" => "여름", "계절4" => "가을"); $result1 = array_search("겨울", $array); $result2 = array_search("여름", $array); $result3 = array_search("4월", $array); ?>

이 예에서 $result1은 "season1"로 설정되고 $result2는 "season3"으로 설정되며 $result3은 문자열 "april"이 원래 배열에서 발생하지 않기 때문에 부울 값 FALSE로 설정됩니다.

예제 2 PHP array_search() 함수는 키를 순서대로 다음 숫자 인덱스로 간주하여 1차원 배열을 처리할 수도 있습니다.

$result 변수는 $array의 "hunter" 요소 인덱스에 따라 1로 설정됩니다.

예 3. 결과 분석에 오류가 있을 수 있습니다.

"워싱턴", 1 => "아담스", 2 => "제퍼슨", 3 => "매디슨", 4 => "먼로"); $result = array_search("워싱턴", $presidents); if (!$result) ( echo "G. 워싱턴은 미국의 초대 대통령이 아니었습니다."; ) ?>

따라서 엄격한 평등으로 결과를 확인하지 않고 George Washington이 미국의 초대 대통령이 아니라는 예상치 못한 메시지를 얻을 수 있습니다.

예 4: 발견된 첫 번째 일치의 키만 반환됩니다.

검색된 값이 배열에서 세 번 발생하더라도 이 함수는 처음 찾은 결과인 0만 반환합니다. 여러 개의 일치 항목을 검색하려면 PHP array_keys() 함수를 사용하는 것이 좋습니다.

배열에서 값을 찾는 것은 거의 모든 PHP 응용 프로그램, 데이터와 함께 작동하는 스크립트에서 필요합니다. 여기에는 여러 가지 방법과 특수 기능이 있습니다. 작업 및 검색 유형에 따라 기능, 실행 속도 및 사용 용이성을 고려하여 하나 또는 다른 도구를 사용해야 합니다. 다음으로 배열에서 요소를 찾는 PHP 함수, ​​가능한 구성 및 방법에 대해 알아보고 어떤 방법이 가장 빠른지 알아보겠습니다.

배열에서 검색하기 위한 함수:
array_search— 배열에서 값을 검색하는 역할을 합니다. 성공하면 원하는 값의 키를 반환하고 아무 것도 발견되지 않으면 FALSE를 반환합니다. PHP 4.2.0 이전에는 array_search()가 FALSE가 아닌 실패 시 NULL을 반환했습니다.

혼합 array_search(혼합 바늘, 배열 haystack [, bool strict])의 구문.

foreach($value로서의 array_expression)
성명
foreach($key => $value로서의 array_expression)
성명

배열 요소를 찾기 위해 foreach 구문이 있는 함수를 사용하는 예는 성공 시 TRUE를 반환합니다.

구성 구문
동안 (expr)
성명

성공 시 배열 요소의 키를 반환합니다.

위의 측정 테이블에서 기능이 array_search, 작은 배열과 큰 배열을 모두 검색할 때 최상의 결과를 보여줍니다. 동시에 배열의 크기에 따라 루프를 사용하는 검색 시간이 크게 늘어납니다.

다차원에서 (18)

array_search 함수에 대한 설명 아래에 있는 예제 중 하나를 수정했습니다. searchItemsByKey 함수는 다차원 배열(N 레벨)에서 $key로 모든 값을 반환합니다. 아마도 이것은 누군가에게 도움이 될 것입니다. 예시:

$arr = array("XXX"=>array("YYY"=> array("AAA"=> array("keyN" =>"value1")), "ZZZ"=> array("BBB"=> 배열 ("keyN" => "값2")) //.....)); $ 결과 = searchItemsByKey($arr,"keyN"); 인쇄"

"; print_r($결과); 인쇄 " 
"; // 출력 배열( => 값1 => 값2)

기능 코드:

함수 searchItemsByKey($array, $key) ( $results = array(); if (is_array($array)) ( if (isset($array[$key]) && key($array)==$key) $results = $array[$key]; foreach ($sub_array로 $array) $results = array_merge($results, searchItemsByKey($sub_array, $key)); ) $results를 반환합니다; )

uid를 검색하고 배열에서 키를 가져오려는 배열이 있습니다.

다음과 같은 2차원 배열이 있다고 가정합니다.

$userdb = array(array("uid" => "100", "이름" => "산드라 슈쉬", "pic_square" => "urlof100"), array("uid" => "5465", "이름" => "스테파니 맥몬", "pic_square" => "urlof100"), array("uid" => "40489", "name" => "마이클", "pic_square" => "urlof40489"));

search_by_uid(100)(첫 번째 사용자의 uid)에 대한 호출은 0을 반환해야 합니다.

search_by_uid(40489) 함수 호출은 2를 반환해야 합니다.

루프를 만들려고 했지만 더 빠른 실행 코드가 필요합니다.

Jakub의 훌륭한 답변을 기반으로 다음은 키를 지정할 수 있도록 하는 보다 일반화된 조회입니다(uid뿐만 아니라).

함수 searcharray($value, $key, $array) ( foreach ($array as $k => $val) ( if ($val[$key] == $value) ( ​​​​return $k; ) ) null 반환 ; )

사용법: $results = searcharray("searchvalue", searchkey, $array);

함수 searchForId($id, $array) ( foreach ($array as $key => $val) ( if ($val["uid"] === $id) ( return $key; ) ) return null; )

작동합니다. 다음과 같이 호출해야 합니다.

$id = searchForId("100", $userdb);

===를 사용하는 경우 비교되는 연산자 유형이 정확히 동일해야 한다는 점을 아는 것이 중요합니다. 이 예에서는 string을 찾거나 === 대신 ==를 사용해야 합니다.

답변을 바탕으로 고루. 이후 버전의 PHP(>= 5.5.0)에서는 한 줄짜리를 사용할 수 있습니다.

$key = array_search("100", array_column($userdb, "uid"));

이것은 오래된 질문이고 허용되는 답변이 있지만 허용되는 답변에 대해 한 가지 변경을 제안할 것이라고 생각했습니다. 따라서 우선 여기에서 허용된 답변이 정확하다는 데 동의합니다.

함수 searchArrayKeyVal($sKey, $id, $array) ( foreach ($array as $key => $val) ( if ($val[$sKey] == $id) ( return $key; ) ) return false; )

대신, 미리 설정된 "uid"를 함수의 매개변수로 바꾸십시오. 이제 아래 코드를 호출하면 여러 배열 유형에 대해 동일한 함수를 사용할 수 있습니다. 작은 변화지만 조금 다릅니다.

// 사용자의 배열 데이터 $userdb = array(array("uid" => "100","name" => "Sandra Shush","url" => "urlof100"), array("uid" => " 5465","이름" => "스테파니 맥몬","url" => "urlof100"), 배열("uid" => "40489","이름" => "마이클","url" => "urlof40489 "),); // 배열의 키 획득 $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "검색 결과: ", $userdb[$arrayKey]["name"]; ) else ( echo "검색 결과를 찾을 수 없습니다"; )

If(! function_exists("arraySearchMulti"))( function arraySearchMulti($search,$key,$array,$returnKey=false) ( foreach ($array as $k => $val) ( if (isset($val[$ 키])) ( if ((string)$val[$key] == (string)$search) ( return ($returnKey ? $k: $val); ) )else( return (is_array($val) ? arraySearchMulti ($search,$key,$val,$returnKey) : null); ) ) null 반환; ))

이 기능을 사용할 수 있습니다. https://github.com/serhatozles/ArrayAdvancedSearch

="2""; $Array = array("a" => array("d" => "2"), array("a" => "예제 세계","b" => "2"), array("c" => "3"), array("d" => "4")); $Result = ArraySearch($Array,$query,1); echo "

"; print_r($결과); 에코 "
"; // 출력: // 배열 // (// => 배열 // (// [a] => 예제 세계 // [b] => 2 //) // //)

질문, 즉.

$dismounta = [ [ "_id" => "5a96933414d48831a41901f2", "discount_amount" => 3.29, "discount_id" => "5a92656a14d5d488570c2c44a2", "f8da1cf", ], [ "_id9" => 할인 "=>"5A9265B914D48548513B122 ",], ["_id "=>"할인 _am3614d488191304b6c3 ","할인 _id "=>"5A92806A14D48858FF5C2EC3 ",], ["_id "=>"5a982a4914d48824721eafe3 ","할인 _amount " => 45.74, "discount_id" => "5a928ce414d488609e73b443", ], [ "_id" => "5a982a4914d48824721">3914d48824721eafe55", "discount_amount" => 10.26, ">

함수 searchForId($id, $array) ( $did=0; $dia=0; foreach ($array as $key => $val) ( if ($val["discount_id"] === $id) ( $ dia +=$val["discount_amount"]; $did++; ) ) if($dia != "") ( echo $dia; var_dump($did); ) null 반환; ); print_r(searchForId("5a928ce414d488609e73b443",$a));

이것도 해보세요

함수 search_in_array($srchvalue, $array) ( if (is_array($array) && count($array) > 0) ( $foundkey = array_search($srchvalue, $array); if ($foundkey === FALSE) ( foreach ($array as $key => $value) ( ​​​​if (is_array($value) && count($value) > 0) ( $foundkey = search_in_array($srchvalue, $value); if ($foundkey != FALSE ) $foundkey 반환 ) ) ) 그렇지 않으면 $foundkey 반환 ) )

$a = ["x" => ["eee", "ccc"], "b" => ["zzz"]]; $ 발견 = null; $search = "에이"; array_walk($a, function ($k, $v) use ($search, &$found) ( if (in_array($search, $k)) ( $found = $v; ) )); var_dump($발견);

여기에 동일한 라이너가 하나 있습니다.

$pic_square = $userdb["pic_square"];

여기 내 예가 있으며 이것이 내 첫 번째 답변이라는 점에 유의하십시오. 하나의 특정 배열만 찾으면 되기 때문에 param 배열을 꺼냈지만 쉽게 추가할 수 있습니다. 나는 본질적으로 단순한 uid 이상을 찾고 싶었습니다.

또한 내 상황에서는 고유하지 않을 수 있는 다른 필드와 함께 검색 결과에 반환할 키가 여러 개 있을 수 있습니다.

/** * @param 배열 다차원 * 검색할 @param 문자열 값, 즉 name_first와 같은 특정 필드 이름 * @param 문자열 연관 키에서 찾을 수 있습니다. 즉, field_name * * @return 배열 키입니다. */ function search_revisions($dataArray, $search_value, $key_to_search) ( // 이 함수는 찾고 있는 연관 키와 관련된 // 특정 값에 대한 개정을 검색합니다. $keys = array(); foreach ($dataArray as $key => $cur_value) ( ​​​​if ($cur_value[$key_to_search] == $search_value) ( ​​​​$keys = $key; ) ) return $keys; )

나중에 다른 값과 연관 키를 조회할 수 있도록 이 글을 작성했습니다. 따라서 첫 번째 예에서는 특정 연관 키에서 값을 검색하고 모든 일치 항목을 반환할 수 있습니다.

이 두 번째 예는 값("Taylor")이 특정 연결 키(first_name)에서 발견되는 위치를 보여줍니다. 그리고다른 값(true)이 다른 연결 키(사용됨)에서 발견되고 모든 일치 항목을 반환합니다("Taylor"라는 이름의 사람이 AND가 사용됨).

/** * @param array multidimensional * @param string $search_value 검색할 값, 즉 특정 "Taylor" * @param string $key_to_search 찾을 연관 키, 즉 first_name * @param string $other_matching_key 연관 고용된 일치 항목에서 찾을 키 * @param string $other_matching_value 일치하는 연관 키에서 찾을 값, 즉 true * * @return 배열 키, 즉 고용된 이름이 "Taylor"인 모든 사람. */ function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null) ( // 이 함수는 사용자가 찾고 있는 연관 키와 관련된 // 특정 값에 대한 개정을 검색합니다. $ 키 = array(); foreach ($dataArray as $key => $cur_value) ( ​​​​if ($cur_value[$key_to_search] == $search_value) ( ​​​​if (isset($other_matching_key) && isset($other_matching_value) ) ( if ( $cur_value[$other_matching_key] == $other_matching_value) ( ​​​$keys = $key; ) ) else ( // 일부 검색에는 여러 개의 일치 항목이 있을 수 있고 // 그렇지 않은 경우도 있으므로 계속하지 않고 열린 상태로 둡니다. .$keys = $key; ) ) ) $keys; ) 반환

기능 사용

$data = array(array("cust_group" => 6, "price" => 13.21, "price_qty" => 5), array("cust_group" => 8, "price" => 15.25, "price_qty" => 4), array("cust_group" => 8, "price" => 12.75, "price_qty" => 10)); $findKey = search_revisions($data,"8", "cust_group", "10", "price_qty"); print_r($findKey);

결과

배열( => 2)

/** * 단순 및 다차원 배열 검색 * @param type $needle * @param type $haystack * @return boolean */ public static function in_array_multi($needle, $haystack)( $needle = trim($needle ); if(!is_array($haystack)) False 반환, foreach($haystack as $key=>$value)( if(is_array($value))( if(self::in_array_multi($needle, $value)) return True; else self::in_array_multi($needle, $value); ) else if(trim($value) === trim($needle))(//가시성 수정// error_log("$value === $ 바늘 설정 가시성을 1 숨김"); 반환 True; ) ) 반환 False; )

(PHP 5 >= 5.5.0)을 사용하는 경우 이에 대한 자체 함수를 작성할 필요가 없습니다. 이 줄만 작성하면 됩니다.

하나의 결과만 원하는 경우:

$key = array_search(40489, array_column($userdb, "uid"));

여러 결과의 경우

$keys = array_keys(array_column($userdb, "uid"), 40489);

주석에서 언급한 것처럼 연관 배열이 있는 경우 다음을 사용하여 수행할 수 있습니다.

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, "uid")),40489);

PHP를 사용하는 경우<5.5.0, вы можете использовать этот backport , спасибо ramsey!

업데이트. 나는 몇 가지 간단한 테스트를 하고 있는데 다중 결과 형식이 가장 빠르고 심지어 Jakub의 사용자 정의 기능보다 더 빠른 것 같습니다!

이후 버전의 PHP(>= 5.5.0)에서는 다음 한 줄짜리를 사용할 수 있습니다.

$key = array_search("100", array_column($userdb, "uid"));

@mayhem이 만든 기능을 확장하면 이 예제는 ( 부분) 검색 문자열:

함수 searchArrayKeyVal($sKey, $id, $array) ( foreach ($array as $key => $val) ( if (strpos(strtolower($val[$sKey])), strtolower(trim($id))) ! == 거짓) ( $key 반환; ) ) 거짓 반환; )

예를 들어 배열의 값은 - Welcome to New York입니다. "New York!"의 첫 번째 사본만 있으면 됩니다.

배열의 모든 요소를 ​​찾는 un 함수를 사용해야 했습니다. 따라서 Jakub Trunechk가 수행하는 기능을 다음과 같이 변경했습니다.

함수 search_in_array_r($needle, $array) ( $found = array(); foreach ($array as $key => $val) ( if ($val == $needle) ( array_push($found, $val); ) ) if (count($found) != 0) $found를 반환하고, 그렇지 않으면 null을 반환합니다. )

$search1 = "데모"; $search2 = "밥"; $arr = array("0" => "hello","1" => "test","2" => "john","3" => array("0" => "martin", "1 " => "밥"),"4" => "데모"); foreach ($arr as $value) ( ​​​​if (is_array($value)) ( if (in_array($search2, $value)) ( echo "successsfully"; //코드 실행 ) ) else ( if ($value) == $search1) ( echo "성공"; ) ) )

가능한 경우 매개변수 유형을 입력하십시오. 그러나 int, bool 및 float와 같은 간단한 유형에서만 작동합니다.

$unsafe_variable = $_POST["user_id"]; $safe_variable = (int)$unsafe_variable ; mysqli_query($conn, "INSERT INTO 테이블(열) VALUES("" . $safe_variable . "")");

프로그래밍은 구문과 의미에 관한 것입니다. 첫 번째는 언어 규칙에 의해 결정되고 두 번째는 개발자의 경험에 의해 결정됩니다. 배열과 관련하여 개발자는 의미 체계를 사용하여 구문을 미묘하게 로드할 수 있습니다. 아직 객체는 아니지만 더 이상 전통적인 의미의 배열이 아닙니다. PHP를 사용하면 자신을 포함하여 다양한 유형의 변수에서 배열을 생성할 수 있습니다. 배열 요소는 함수, 즉 실제 알고리즘, 실제 의미로 배열을 로드하는 기능이 될 수 있습니다.

구문은 안정적이지만 버전마다 변경되며 상향식에서도 항상 호환되는 것은 아닙니다. 프로그램 이식성은 지난 세기의 잘 잊혀진 성과입니다. 의미 체계는 진화하고 있으며 모든 언어 버전에서 뿐만 아니라 항상 적용할 수 있습니다. 언어의 규칙조차 제공되지 않는 것을 표현하기 위해 구문 구조를 사용하는 것이 전통이 되었습니다. 배열의 예를 사용하면 가장 간단하게 이해할 수 있습니다.

어레이 구성

PHP의 배열에는 편리한 구문과 기능이 있습니다. 이것은 미리 설명할 수 있지만 필요에 따라 즉석에서 배열을 만드는 것이 편리한 경우가 많습니다.

공개 $aNone = array(); // 배열이 설명되고 아무것도 포함하지 않음

공개 $aFact = array("아보카도", "복숭아", "체리"); // 이 배열에는 3개의 요소가 있습니다.

조건을 확인하면서 배열 생성:

$cSrcLine = "분석된 데이터 라인";

($i=0; $i에 대해<13; $i++) {

if (checkFunc($cSrcLine, $cUserLine) (

$aResult = "예"; // PHP 배열에 추가

$aResult = "아니요";

이 예제를 실행한 결과 13개 요소의 배열이 생성되며 그 값은 "Yes" 또는 "No" 문자열만 됩니다. 요소는 0에서 12까지 인덱싱됩니다. 먼저 "미래" PHP 배열을 문자열에 작성하여 동일한 효과를 얻을 수 있습니다.

$cFutureArray = "";

($i=0; $i에 대해<13; $i++) {

$cUserLine = inputUserLine(); // 무언가를 입력

if ($i > 0) ( $cFutureArray .= "|"; )

if (checkFunc($cSrcLine, $cUserLine) ( $cFutureArray .= "예";

) else ( $cFutureArray .= "아니요"; )

$aResult = 폭발("|", $cFutureArray);

다차원 배열

많은 콘텐츠 관리 시스템(CMS)은 "대부분" 어레이를 사용합니다. 한편으로 이것은 좋은 습관이지만 다른 한편으로는 적용하기 어렵게 만듭니다. 저자가 배열 내 배열 PHP 교리를 이해하더라도 이를 남용해서는 안 됩니다. 개발자만 복잡한 표기법에 익숙해져야 하는 것은 아닙니다. 종종 잠시 후 제작자 자신이 처음에 쓴 내용을 오랫동안 기억할 것입니다.

"view_manager" => array(41, "template_path_stack" => array(__DIR__ . "/../view",),

"라우터" => array("경로" => array("sayhello" => array(

"유형" => "Zend\Mvc\Router\Http\Literal",

"옵션" => array("경로" => "/sayhello", "기본값" => 배열(

"컨트롤러" => "Helloworld\Controller\Index", "액션" => "인덱스",))))))),

"컨트롤러" => array("invokables" => array(

"Helloworld\Controller\Index" => "Helloworld\Controller\IndexController"))

이것은 ZF 2의 PHP array-in-array 샘플 실습입니다.처음에는 그다지 고무적이지 않지만 작동하고 아마도 이 프레임워크를 성공적으로 만들 것입니다(예: ZendSkeletonApplication/module/Helloworld/config/module.config.php 모듈).

배열은 설계 및 개발 중에 중요한 데이터 구성입니다. 다차원 변형은 한때 인기가 있었지만 시간이 지남에 따라 최대 2차원 또는 3차원 배열이 필요했습니다. 이렇게 하면 더 쉽고 명확해지며 전문성의 관점에서 볼 때 무언가가 증가하기 시작하면 문제의 공식화나 코드에서 무언가 잘못되었음을 의미합니다.

간단하고 접근 가능하며 이해하기 쉽습니다.

PHP에서 배열 내에 배열을 생성할 때, 자신을 2~3단계로 제한하는 것이 가장 좋습니다. PHP의 안정성과 신뢰성에도 불구하고 구문 구조 처리에서 오류가 발생합니다. 좋은 코드 편집기가 있고 대괄호와 쉼표를 정확하게 계산하는 데 익숙해지면 이것을 참을 수 있습니다. 그러나 PHP는 데이터 유형을 제어하지 않으며(이것이 현대 프로그래밍의 업보임) 개발자가 의미 오류를 연습할 수 있도록 합니다.

변수의 유형을 제어하는 ​​규칙이나 의미론을 구문으로 바꾸는 자신의 아이디어는 종종 감당할 수 없는 사치입니다. 이것은 스크립트 속도, 코드 가독성, ...의 손실입니다. 코딩의 단순성은 항상 필수적이기 때문입니다.

PHP에는 중요한 부정적인 기능이 있습니다. 모호성이 발생하면 스크립트가 중단됩니다. 모든 디버거가 예상치 못한 상황을 처리하는 것은 아니며 많은 것은 개발자의 경험과 직관에 달려 있습니다. 알고리즘이 단순할수록 정보에 더 쉽게 접근할 수 있고 구조화될수록 오류를 찾거나 전혀 만들지 않을 가능성이 높아집니다.

첫 번째 배열이 나타났을 때 구조 형태의 변형 데이터가 제안된 것이 특징입니다. 즉, 다양한 데이터 유형에서 무언가를 생성하려는 서투른 시도입니다. 전자는 살아남아 새로운 효율적인 구문을 얻었고 후자는 역사에서 사라졌습니다.

단순 연관 배열

2차원 배열에 대한 항목은 대괄호 "[" 및 "]"의 또 다른 쌍입니다. 예를 들면 다음과 같습니다. $aSrcData는 $aSrcData 배열에 포함된 배열의 요소를 나타냅니다. PHP에서는 데이터를 미리 선언할 필요가 없습니다. 선언된 정보는 항상 존재 여부를 확인할 수 있습니다.

필요할 때만 필요한 형태로 생성하고 더 이상 필요하지 않을 때 폐기하는 것이 매우 효율적입니다. 의미 있는 이름을 키(인덱스)로 사용하면 알고리즘의 현재 위치 컨텍스트에서 의미가 있는 읽기 가능한 구성을 얻을 수 있습니다.

$aAnketa["name"] = "이바노프";
$aAnketa["나이"] = 42;
$aAnketa["work"] = "감독";
$aAnketa["활성"] = 참;
$a테이블 = $a안케타;

$aAnketa["name"] = "페트로프";
$aAnketa["나이"] = 34;
$aAnketa["work"] = "관리자";
$aAnketa["활성"] = 참;
$a테이블 = $a안케타;

$aAnketa["name"] = "아파나시예프";
$aAnketa["나이"] = 28;
$aAnketa["work"] = "일꾼";
$aAnketa["활성"] = 거짓;
$a테이블 = $a안케타;

$sOne .= 내파("; ", $aTable) . "
"; // 두 번째 PHP 배열을 문자열로
$sOne .= $aTable["작업"]; // 두 번째 배열의 한 요소에 액세스

이 예의 결과(첫 번째 배열은 정상이고, 그 안의 키는 0부터 시작하고, 두 번째 배열은 연관적이며, "name", "age", "work", "active"의 4개 키가 있습니다):

$sOne = "페트로프, 34, 매니저, 1
관리자";

이 간단한 예에서는 생성된 설문지를 모든 직원에게 적용하는 방법을 볼 수 있습니다. 직원 번호별로 색인을 사용하여 직원 배열을 생성할 수 있으며 특정 직원이 필요한 경우 직원 번호로 선택합니다.

조직에 세분화가 있거나 계절 근로자가 있거나 근무 퇴직자를 분리해야 하는 경우... "PHP-array-in-array" 구성이 매우 편리하지만 차원에 현혹되어서는 안 됩니다. 2차원 또는 3차원은 효과적인 솔루션의 한계입니다.

배열 작업을 위한 키

모든 것이 어떻게 작동하는지가 중요하기 전에 바이너리 시대의 마지막 몇 년 동안 프로그래머가 어레이의 요소가 어떻게 저장되었는지 정확히 알고 싶었고 직접 액세스하기를 원했을 때 완전히 잊혀졌습니다. 메모리에서 1바이트 이상을 차지하는 많은 문자 인코딩이 나타났습니다. "비트"라는 단어는 이제 비트 검색 작업에서만 찾을 수 있지만 PHP 배열에서 검색하는 것은 별개의 문제입니다. 요소에 대한 액세스는 단순하고 연관될 수 있습니다. 첫 번째 경우에 배열 요소(PHP에서 사용 가능한 모든 유형을 가짐)는 0, 1, 2,... 원하는 값.

$aLine["과일"] = "오렌지"; // 여기 PHP 배열 키 = "과일"

또는 (페이지 및 코드의 인코딩과 관련하여 모든 것이 정확하도록):

$aLine = iconv("UTF-8", "CP1251", "주황색");

$aLine 배열에 새 값을 추가할 때:

$aLine = iconv("UTF-8", "CP1251", "복숭아");
$aLine = iconv("UTF-8", "CP1251", "오이");
$aLine = iconv("UTF-8", "CP1251", "가지");

루프의 결과:

foreach($aLine as $ck => $cv) (
$cOne .= $ck . "=" . $cv . "
";
}

받을 것이다:

과일=오렌지
0=복숭아
야채=오이
1=가지

배열의 PHP-key는 "peach"와 "eggplant" 요소를 추가할 때 0부터 순차적으로 형성되며, 그 값을 지정하면 이 값과 같게 됩니다.

배열에서 요소 제거

가장 쉬운 방법은 처리 중입니다. 이 경우 예를 들어 루프를 실행한 결과 원래 배열이 스캔되어 불필요한 요소가 단순히 작성되지 않은 새 배열이 형성됩니다.

더 쉽게 할 수 있습니다. 마지막 예에 적용된 경우:

설정되지 않음($line); // PHP 배열에서 요소 제거

결과는 다음과 같습니다.

과일=오렌지
야채=오이
1=가지

배열 요소를 조작하기 위한 많은 옵션이 있습니다. 예를 들어, implode() 및 explode() 함수를 사용하여 PHP 배열을 하나의 구분 기호가 있는 문자열로 작성하고 다른 구분 기호를 사용하여 다른 배열로 다시 구문 분석할 수 있습니다.

단순히 PHP에서 전체 배열을 삭제하려면 다음과 같이 작성하십시오. unset($aLine);

충분 해.

배열 검색

PHP에는 특별한 조회 및 in_array() 함수가 있지만 사용하기로 결정하기 전에 고유한 PHP 배열 조회를 수행하는 것을 고려해야 합니다.

모든 프로젝트는 특히 의미 체계의 일부가 구문으로 전송되고 매우 구체적인 의미 있는 키로 표시되는 경우 특정 구성된 배열입니다. 이를 통해 의미 있는 레이블을 지정할 수도 있는 고유한 검색 기능을 수행할 수 있습니다.

PHP에서는 프로그램 실행 중에 이름이 결정되는 함수를 호출할 수 있습니다. MS Word 문서를 읽고 생성할 수 있는 PHPWord 라이브러리의 매우 실용적인 예:

$elements = array("텍스트", "인라인", "TextRun", "링크", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "테이블", "이미지", "개체", "각주",
"미주", "CheckBox", "TextBox", "필드", "줄");

$함수 = 배열();

($i = 0; $i에 대해< count($elements); $i++) {
$functions[$i] = "추가" . $요소[$i];
}

결과적으로 $functions 배열은 $elements 배열의 값, 즉 문서의 실제 요소와 작동하는 실제 함수의 이름을 받습니다.

$elements에서 $functions 함수를 호출하면 완벽한 조회와 빠른 결과를 얻을 수 있습니다.

요소 정렬

데이터 정렬 작업은 중요하며 PHP는 이를 위한 몇 가지 함수를 제공합니다: sort(), rsort(), asort(), ksort(), ... 요소 오름차순 및 내림차순, 두 번째 두 함수는 키와 요소 간의 관계를 저장합니다. 가치. 때때로 배열 값을 무작위로 섞는 것이 합리적입니다 - shuffle().

정렬을 위해 PHP 함수를 사용할 때 요소가 다른 유형을 가질 수 있을 뿐만 아니라 아주 자연스러운 내용이 아닐 수도 있다는 사실을 잊어서는 안됩니다. 우선, 러시아 문자가 포함된 문자열 정렬, 날짜 정렬, 다양한 형식으로 작성된 숫자에 대해 매우 주의해야 합니다.

최소한 스크립트의 테스트 단계에서 완벽한 솔루션을 작성하는 가장 좋은 방법은 손으로 정렬하는 것입니다. 예상치 못한 상황을 예측하는 데 도움이 됩니다.

문자열 배열

implode() 및 explode() 함수 덕분에 배열을 쉽게 문자열로 변환하고 다시 검색할 수 있습니다. 이를 통해 데이터를 컴팩트 보기에 저장하고 필요에 따라 편리한 상태로 확장할 수 있습니다.

문자열로 변환된 배열은 새로운 가능성을 열어줍니다. 예를 들어, 텍스트에서 키워드를 검색하는 작업에서는 찾은 내용이 다시 추가되지 않아야 합니다.

$cSrcLine = "텍스트 텍스트 ListItemRun TextBox ListItem TextBox 체크박스 체크박스 텍스트박스 각주";

$aSrc = 폭발(" ", $cSrcLine);
$cDstLine = "";

($i=0; $i에 대해< count($aSrc); $i++) {
$c찾기 = "[" . $aSrc[$i] . "]";
if (! is_integer(strpos($cDstLine, $cFind))) (
$cDstLine .= $c찾기;
}
}
$aDst = 폭발("][", $cDstLine);

$cOne = 내파("; ", $aDst);

결과적으로 $cOne 변수는 "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote"와 같이 소스 문자열에서 한 번 발생한 값만 받습니다.

키와 값의 러시아어

구문 구성에서 국가 인코딩과 관련된 것은 사용하지 않는 것이 좋습니다. 문자가 ~ z를 넘어서는 다른 모든 언어와 마찬가지로 러시아어는 데이터 영역에서 문제를 일으키지 않지만 코드 구문에서는 문제를 일으키지 않습니다. 때로는 단순한 PHP 작업이 "프린터나 화면에 배열을 출력"하는 것조차 "크럼블"로 이어지며 더 자주 단순히 스크립트를 중지합니다.

PHP는 충성도가 높은 언어이며 국가별 인코딩에 관대하지만 키 값이 올바른 장소와 적절한 시간에 표시되어 인식할 수 없는 작업량을 다시 수행해야 하는 상황이 많이 있습니다.

PHP 구문 및 언어 환경

PHP 구문은 한 가지이지만 이 구문의 구성은 하드웨어 옵션과 함께 운영 체제와 함께 다른 응용 프로그램을 "다룹니다". 많은 옵션이 있으며 모든 것을 예측할 수는 없습니다.

"코드에는 코드만 있고 입력, 내부 및 출력에 정보가 있습니다"라는 규칙은 예상치 못한 놀라움을 피하는 데 도움이 됩니다. 배열의 PHP 값은 "Russian"일 수 있지만, 그 키는 주어진 언어의 관점에서 뿐만 아니라 환경의 관점에서도 구문적으로 정확해야 합니다.