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
'programing' 카테고리의 다른 글
| 루프에서 반복을 건너뛰는 방법 (0) | 2023.01.15 |
|---|---|
| Python은 해석됩니까, 컴파일됩니까, 아니면 둘 다입니까? (0) | 2023.01.15 |
| 서버를 다시 시작하지 않고 MySQL 쿼리 캐시 지우기 (0) | 2023.01.15 |
| MySQL : 저장 프로시저 내의 트랜잭션 (0) | 2023.01.15 |
| 모든 열을 비교하는 MariaDB/MySQL을 제외한 다른 방법 (0) | 2023.01.15 |