programing

php - 연관 배열의 숫자 인덱스를 가져옵니다.

goodjava 2023. 1. 15. 16:54

php - 연관 배열의 숫자 인덱스를 가져옵니다.

연관된 배열이 있으며 키의 숫자 위치를 찾아야 합니다.어레이를 찾기 위해 수동으로 루프를 통해 어레이를 찾을 수 있지만 PHP에 내장된 더 좋은 방법이 있을까요?

$a = array(
  'blue'   => 'nice',
  'car'    => 'fast',
  'number' => 'none'
);

// echo (find numeric index of $a['car']); // output: 1
echo array_search("car",array_keys($a));
$blue_keys = array_search("blue", array_keys($a));

http://php.net/manual/en/function.array-keys.php

Fosco의 답변이 틀린 것은 아니지만, 이것과 함께 고려해야 할 사례가 있습니다. 혼합 어레이입니다.다음과 같은 배열이 있다고 상상해 보십시오.

$a = array(
  "nice",
  "car" => "fast",
  "none"
);

PHP에서는 이러한 구문을 사용할 수 있지만 한 가지 문제가 있습니다. Fosco의 코드를 얻을 수 있습니다.0 한테는 안 좋은 일이지만 왜 이런 일이 생기는 거지?
왜냐하면 문자열과 정수를 비교할 때 PHP는 문자열을 정수로 변환하기 때문입니다(그리고 제 생각에 이것은 약간 바보같습니다).array_search()첫 번째 인덱스에서 정지된 인덱스를 검색합니다.("car" == 0) 정말이에요.
설정array_search()strict 모드로는 문제가 해결되지 않습니다.array_search("0", array_keys($a))인덱스가 0인 요소가 존재하더라도 false가 반환됩니다.
그래서 제 솔루션은 모든 인덱스를array_keys()스트링과 비교하여 올바르게 비교합니다.

echo array_search("car", array_map("strval", array_keys($a)));

인쇄물1(정답입니다).

편집:
Shaun이 아래의 코멘트에서 지적한 바와 같이 int 인덱스를 검색하게 되면 인덱스 값에도 동일한 내용이 적용됩니다.

$a = array(
  "foo" => "bar",
  "nice",
  "car" => "fast",
  "none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));

항상 얻을 수 있는 것은0이는 틀렸습니다.따라서 해결책은 인덱스를 다음과 같은 문자열에 캐스트하는 것입니다(변수를 사용하는 경우).

$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));

array_search를 사용하는 솔루션은 매우 무겁기 때문에 이 상황에서는 스트레이트 검색을 사용할 필요가 없습니다.

훨씬 더 나은 솔루션은 다음과 같습니다.

$keyIndexOfWhichYouAreTryingToFind = 'c';
$array = [
    'a' => 'b',
    'c' => 'd'
];
$index = array_flip(array_keys($array))[$keyIndexOfWhichYouAreTryingToFind];

이러한 유형의 검색은 대규모 어레이에서 훨씬 더 뛰어난 성능을 발휘합니다.그 이유는 난이도로, 즉 O(n)=n이 아닌 O(n)=1이다(가능한 변형최악의 경우).따라서 1000000 요소를 가진 어레이의 경우 1000000이 아닌 1회 반복됩니다.


  $a = array(
      'blue' => 'nice',
      'car' => 'fast',
      'number' => 'none'
  );  
var_dump(array_search('car', array_keys($a)));
var_dump(array_search('blue', array_keys($a)));
var_dump(array_search('number', array_keys($a)));

array_keys에 기반한 모든 솔루션은 혼합 어레이에서 작동하지 않습니다.솔루션은 간단합니다.

echo array_search($needle,array_keys($haystack), true);

From php.net: 세 번째 파라미터 strict가 TRUE로 설정되어 있는 경우 array_search() 함수는 건초 스택에서 동일한 요소를 검색합니다.즉, 건초 더미에서 바늘의 엄격한 유형 비교도 수행되며 개체는 동일한 인스턴스여야 합니다.

내가 생각해낸 해결책...아마도 Fosco의 솔루션과 비교하면 매우 비효율적일 것입니다.

 protected function getFirstPosition(array$array, $content, $key = true) {

  $index = 0;
  if ($key) {
   foreach ($array as $key => $value) {
    if ($key == $content) {
     return $index;
    }
    $index++;
   }
  } else {
   foreach ($array as $key => $value) {
    if ($value == $content) {
     return $index;
    }
    $index++;
   }
  }
 }

언급URL : https://stackoverflow.com/questions/3365766/php-get-numeric-index-of-associative-array