どのようにあなたは要素を取得する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
これは解決策だったでしょうが、私は正のキーを使用していないので私は私がフォローしています(私は本当にこれはphpの部分でも公平ではありません)
Fatal error: Uncaught exception 'InvalidArgumentException'
with message 'array must contain only positive integer keys'
大規模なデータセットとはどういう意味ですか。
1e6
または1e7
と512M memory limit
確かに何かが好きですfseek
for arrayはトリックをするでしょう..しかしそれが存在するかどうかわからない
PHP 5.4を想定し、配列を間接参照します。
echo $array[array_keys($array)[$position]];
以前のバージョンでは、2行に分割する必要があります。
$keys = array_keys($array);
echo $array[$keys[$position]];
比較的高価なものだけを呼び出せるようにするために、複数の要素にアクセスする必要がある場合は、5.4以降で2行のアプローチを使用する価値もあります。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