어떻게 요소를 얻을 수 있나요?key
과value
에서의n
루프없이 특정 위치의 위치 배열.
상상해 보라.
$postion = 3; // get array at 3rd position
$array = array(
"A" => "Four",
"B" => "twp",
"C" => "three",
"D" => "Four",
"E" => "Five",
"F" => "Four");
$keys = array_keys($array);
$value = array_values($array);
echo implode(array_slice($keys, $postion, 1)), PHP_EOL; // Key at 3rd posstion
echo implode(array_slice($value, $postion, 1)), PHP_EOL; // Value at n position
산출
D
Four
메소드의 문제점
왜 루프를 사용하지 않습니까?
왜 데이터베이스를 사용하지 않습니까?
왜 사용하지 않는가?SplFixedArray
이것은 솔루션이었을 것이지만 나는 pher 부분에 대해 긍정적 인 키를 사용하지 않았기 때문에 위어를 따라 갔다.
Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'array must contain only positive integer keys'
대용량 데이터 세트 란 무엇입니까?
1e6
또는1e7
와512M memory limit
확신 해.fseek
배열에 대한 트릭을 할 것이라고 ..하지만 그것이 존재하는 경우 확실하지
array dereferencing을 사용하여 PHP 5.4를 가정합니다.
echo $array[array_keys($array)[$position]];
이전 버전에서는 두 줄로 나누어야합니다.
$keys = array_keys($array);
echo $array[$keys[$position]];
또한 5.4+에서 두 줄 접근법을 사용하는 것이 가치가 있습니다. 여러 요소에 액세스해야만 상대적으로 비싼 곳으로 전화 할 수 있습니다.array_keys()
한 번 기능하십시오. 또한 역 참조 방법은 배열 내의 특정 위치가 존재한다고 가정하며 그렇지 않을 수도 있습니다. 여러 작업으로 나누면 해당 오류를 처리 할 수 있습니다.
물론 키에 액세스 할 필요는 없지만 간단히 다음 작업을 수행 할 수 있습니다.
echo array_values($array)[$position];
// or
$values = array_values($array);
echo $values[$position];
편집하다
그만큼ArrayIterator
수업에서이 작업을 수행 할 수도 있습니다.
$iterator = new ArrayIterator($array);
$iterator->seek($position);
echo $iterator->key(), " = ", $iterator->current(); // D = Four
이것은 아마 당신이 그것을 할 때 (여전히이 요소를 연구하는) 메모리에서 배열의 복사본을 생성하지 않는다고 가정하고, 아마도 임의의 키에 대한 다중 접근을위한 최선의 방법이라고 가정 할 때 이것을 수행하는 가장 비용이 적게 드는 방법 일 것입니다.
array_keys
그의 경우에는 배열이 수백만 개의 항목을 포함 할 때 너무 비쌉니다. 그렇다면이 모든 경우의 유스 케이스를 얻지는 못합니다. DB 대신 코드에서 많은 수의 항목으로 작업하지 않아도됩니다. - raina77owArrayIterator
하지만 어쨌든 사본을 만들 것인지 여부를 확신 할 수 없기 때문에 개선 할 수있는 부분을 잃어 버렸습니다. - DaveRandomArrayObject
추구하지 않아 .... 좋은 사람 - Baba
당신이 원하는 것은 불가능합니다. PHP의 배열은 키를 사용하여 효율적으로 액세스 할 수 있지만 오프셋을 사용하여 효율적으로 액세스 할 수는 없습니다. 순서는 링크 된 목록으로 만 사용할 수 있으므로 원하는 최상의 효율성은 배열을 통과하여 오프셋을 찾는 O (n) 루프입니다.
$i = 0;
foreach ($array as $value) {
if ($i++ === $offset) {
// found value
}
}
이 작업을 빨리하려면 올바른 숫자 배열 인덱스 배열을 사용해야합니다.
next()
? - raina77owforeach
배열의 사본을 만들까요 ??? - Babaforeach
핵심 커밋;-) - DaveRandom
사실 $ values 배열이 필요하지 않습니다.
$keys = array_keys($array);
$value_3=$array[$keys[3]];
나는 당신의 질문을 잘 이해하지 못한다. 그러나 당신이 위치에서 열쇠와 요소를 필요로한다면
$position = 3; // get array at 3rd position
$array = array(
"A" => "Four",
"B" => "twp",
"C" => "three",
"D" => "Four",
"E" => "Five",
"F" => "Four");
$keys = array_keys($array);
$values = array_values($array);
if($values[$position] == "Four" && $keys[$position] == "D") {
echo "All it's Right!\n";
}
당신은 그 임무에 대한 내파련이 필요 없다.
array_slice
단지 대신$keys[$position]
? - jeroen$keys
숫자 키를 가지고 있습니다.$keys = array_keys($array);
. - jeroen