>  기사  >  백엔드 개발  >  PHP는 양방향 인덱스 쿼리를 구현하기 위해 어떤 데이터 구조를 가지고 있습니까?

PHP는 양방향 인덱스 쿼리를 구현하기 위해 어떤 데이터 구조를 가지고 있습니까?

WBOY
WBOY원래의
2016-08-10 09:07:161210검색

어떻게 표현해야 할지 모르겠습니다. 간단히 말해서 요구 사항이 C#의 linq와 다소 비슷합니다.
다음과 같은 배열이 있으면

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>

이제 $test['a']를 통해 'a1'을 쿼리할 수 있지만 'a1'을 통해 'a'와 'b' 두 요소도 쿼리하고 싶습니다. 방법을 문의하세요. 이것을 PHP로 구현 하시겠습니까?

보충: 어떤 사람들은 foreach를 사용하여 구현한다고 하지만 내 배열은 나중에 수천 또는 수만 개로 매우 커질 수 있으므로 foreach를 사용하는 것은 확실히 효율적이지 않습니다.

기존 솔루션은 각 배열 요소의 키 값이 다른 상황, 즉 1이 array_search, 2가 array_flip을 먼저 사용한 후 전통적인 $test[를 사용하는 상황만 해결할 수 있습니다. 'a1'] 찾아보세요.

답글 내용:

어떻게 표현해야 할지 모르겠습니다. 간단히 말해서 요구 사항이 C#의 linq와 다소 비슷합니다.
다음과 같은 배열이 있으면

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>

이제 $test['a']를 통해 'a1'을 쿼리할 수 있지만 'a1'을 통해 'a'와 'b' 두 요소도 쿼리하고 싶습니다. 방법을 문의하세요. 이것을 PHP로 구현 하시겠습니까?

보충: 어떤 사람들은 foreach를 사용하여 구현한다고 하지만 내 배열은 나중에 수천 또는 수만 개로 매우 커질 수 있으므로 foreach를 사용하는 것은 확실히 효율적이지 않습니다.

기존 솔루션으로는 각 배열 요소의 키 값이 다른 상황, 즉 일대일 매핑 상황만 해결할 수 있습니다. 첫 번째는 array_search, 두 번째는 array_flip, 그 다음은 전통적인 $test['a1'] 찾기.

매뉴얼의 array_search를 통해 귀하의 요구 사항을 해결할 수 있습니다.

<code class="php"><?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
?> </code>

그룹의 전문가에게 문제 해결을 요청하세요. array_keys만 있으면 됩니다.

<code><?php
$a=array("a"=>"Dog","b"=>"Dog","c"=>5,"d"=>"5");
print_r(array_keys($a,"Dog"));
//Array ( [0] => a [1] => b )
 ?>
 </code>

코드대로 가세요! ~

좋은 방법은 없습니다. 어레이 2개로 해보자

초대해 주셔서 감사합니다. 배열 구조의 key은 확실히 고유하지만, 제가 아는 한 keyc#을 구현하기 위해 서로 다른 linq는 동일한 값에 해당할 수 있기 때문입니다.

, 배열 값이 고유한지 확인해야 합니다.
<code class="php">$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

//去除重复的值
$test = array_unique($test);</code>

중복된 ​​값을 제거한 후 배열을 반대로 하세요.
<code class="php">$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

$test = array_unique($test);

$wocao = array_flip($test);
var_dump($wocao);
</code>

key 반전 구조는 다음과 같이 원본 배열의 value을 값으로 처리하고 원본 배열의 key

으로 처리합니다.
<code>array(4) {
  ["a1"]=> string(1) "a"
  ["b1"]=> string(1) "b"
  ["c1"]=> string(1) "c"
  ["d1"]=> string(1) "d"
}</code>

이제 c#과 유사한 linq 기능을 구현할 수 있습니다

<code>$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

$test = array_unique($test);

$wocao = array_flip($test);

$test['a'];   //a1
$wocao['a1']; //a</code>

부족한점 지적해주세요,,,

그냥 값을 기준으로 키를 쿼리하는 것 아닌가요? array_keys로 해결할 수 있습니다.

<code>$arr = array('a' => 'a1', 'b' => 'a1', 'c' => 'c1');
var_export( array_keys($arr, 'a1') ); //输出键名 a 和 b</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.