2013-10-13 1 views
3

Perl의 언어에서 필자는 을 한 가지와 다른 것 또는 필수 요소 목록 간의 매핑으로 정의합니다. 설명서에 명시된 바와 같이. 해시는 기본 데이터 형식입니다. 키를 사용하여 내용에 액세스합니다.해시 또는 매핑이 PHP에서 작동하는 방식

기본적으로 해시는 배열에 가깝습니다. 초기화 작업도 매우 비슷합니다.

Perl에서 매핑을 만들려면 다음과 같이 비교할 수 있습니다.

my %map = (
    A => [qw(a b c d)], 
    B => [qw(c d f a)], 
    C => [qw(b d a e)], 
); 

my @keys = keys %map; 
my %matches; 

for my $k (1 .. @keys) { 
    $matches{$_} |= 2**$k for @{$map{ $keys[$k-1] }}; 
} 

for (sort keys %matches) { 
    my @found; 
    for my $k (1 .. @keys) { 
     push @found, $keys[$k-1] if $matches{$_} & 2**$k; 
    } 
    print "$_ found in ", (@found? join(',', @found) : 0), "\n"; 
} 

Output: 
a found in A,C,B 
b found in A,C 
c found in A,B 
d found in A,C,B 
e found in C 
f found in B 

난 당신이 차라리 sprintf 사용하는 것이 무엇을하고 있는지 들어

+2

흠, 불쾌감은 없지만 이것은 매우 고안된 예입니다. Perl과 PHP에서 실제로 이렇게하려면 문자열 보간을 사용하면됩니다. 더 좋은 예를 생각해 낼 수 있습니까? – kojiro

+0

업데이트 된 내용보기 – hwnd

답변

4

을 올바르게, Perl 해시에 대한 지식을 PHP에 적용하려고합니다. 내가 맞다면 ...

"Perl 해시"는 일반적으로 "연관 배열"이라고하며, PHP는 이것을 인덱스로 사용하는 배열로 구현하며 그 값은 규칙적인 배열. PHP Array docs에서 PHP가이 (및 기타) 유형의 배열로 작업하는 방법에 대한 많은 예제를 확인하십시오.

PHP에 대한 좋은 점은 배열을 어떻게 처리 할 수 ​​있는지에 대해 매우 유연하다는 것입니다. 배열에 키 - 값 쌍이있는 것으로 정의한 다음 일반 배열처럼 취급하고 키를 무시하면 제대로 작동합니다. 당신은 섞일 수 있고 일치 할 수 있습니다 ... 그것은별로 불평하지 않습니다.

철학적으로 해시 또는지도는 관련 정보의 개별 부분을 함께 유지하는 방법 일뿐입니다. 이것이 모든 원시적 인 데이터 구조가 아닌데, PHP는 여러분이 어떻게 사물에 대해 어떻게 움직이는 지에 대해별로 비판적이지 않습니다. 내장 된 최적화 기능이 많이 있으며, 이러한 유형의 작업을 효율적으로 수행하는 데있어 튼튼한 작업을 수행합니다.

이 예와 관련된 귀하의 질문에 대답하려면 : 단순 (말인지 생각) 및 유지, 내가 연관 배열의 사용에 아무 잘못이 있다고 생각하지 않습니다에 관해서는

1). 데이터 세트가 쌍으로되어 있으면 키 - 값 쌍이 이러한 유형의 데이터를 표현하는 자연스러운 방법입니다.

2) 코드 및 스크립트 실행 오버 헤드가 늘어나는 한 가장 효율적인 방법은 ... 그런 매핑을 사용하는 것이 PHP에서는 매우 작은 작업입니다. 나는 PHP를 다루는 다른 방법이별로 중요하지 않을 것이라고 생각합니다. PHP는 수천 명의 사람들이 불만없이 그것을 처리 할 수 ​​있습니다. 이제 일반 표현식의 사용을 피할 수 있다면 ...

3) 실제로 사용하고 있습니다. 생각하지 마세요. PHP에서는 단지 "배열"일뿐입니다. 그것은 임의의 양의 요소를 포함하는 변수이고, PHP는 다중 차원 또는 연관성을 잘 처리합니다. 당신이 가지고있는 어떤 문제의 원인이 될 수는 없다는 것은 충분히 있습니다.

PHP는 해시/맵과 같은 것들을 매우 논리적이고 효율적으로 처리 할 것입니다. 즉, 언어의 모든 부분이 그러한 것에 대해 생각하려고 노력하지 않아도된다는 점에 있습니다.관련된 데이터 조각이 청크에있는 경우 배열을 사용하십시오. 데이터 조각이 쌍으로 제공되면 키 - 값 쌍을 사용하십시오. 그것이 십여 가지가된다면 "배열 배열"(배열의 일부 또는 전체가 배열 인 다차원 배열)을 사용하십시오.

키 - 값 쌍을 사용하기를 원했기 때문에 PHP는 엄청난 오버 헤드를 생성하는 것처럼 어리석은 일을하지 않으며 foreach $yourArray as $key => $value과 같은 기본 제공 기능과 array_keys() 및 array_values). 부담없이 사용하십시오. 핵심 기능으로 일반적으로 잘 최적화되어 있습니다.

+0

철저한 설명에 감사드립니다. – hwnd

1

의 성능과 효율성을 위해이 일을 가장 좋은 방법 알아 싶습니다 : 이해하면

$format = 'Hello %s how are you. Hey %s, hi %s!'; 
printf($format, 'foo', 'bar', 'baz'); 
+0

당신이 링크하고있는'sprintf' 문서에는 키 기반 sprintf를 구현해야하는 코드가있는 몇 개의 주석이 있습니다. – kojiro

관련 문제