キー/値のペアの配列インデックスを使用して連想配列の値を設定します。例:PHPの整数インデックスによる連想配列へのアクセス
$my_arr = array("bling" => "some bling", "bling2" => "lots O bling");
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
キー文字列を使用せずにこれを行うにはどうすればよいですか?
キー/値のペアの配列インデックスを使用して連想配列の値を設定します。例:PHPの整数インデックスによる連想配列へのアクセス
$my_arr = array("bling" => "some bling", "bling2" => "lots O bling");
$my_arr[1] = "not so much bling"; // Would change the value with key bling2.
キー文字列を使用せずにこれを行うにはどうすればよいですか?
数値キーと連想インデックスキーの間には相関がありません。
あなたがにしたいと言うのキー/値の配列インデックスを使用して連想配列の値を設定し、その後、あなたは$array[1]
が$array['foo']
を設定することと同じではありません設定、与えられたキーを使用する必要があります。
このアレイ
print_r(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value'));
を考えるこれはfooが配列の2番目の要素である
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
を与えます。これはオフセットですが、インデックス1とは関係ありません。上記の配列では、インデックス1はbaz
に関連付けられています。 foo
が最初の連想キーであるという理由だけで、実際の数字キー1とは何の関係もないと仮定するのは間違いです。some
は2に対応しません。
同様に、上記のような混合配列の場合、あなたが本当にを行っている$array[$keys[1]]
を行う際
print_r(array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')));
だから
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
を与えるためarray_keys
とソリューションは、他の場所で動作しません、このサイト上で示唆しました。しかし、その配列('some'
)の2番目の結合値にアクセスする場合は、$array[$keys[2]]
を実行することはできません。これは$array[1]
と評価され、その値はbaz
となるためです。それがキーまたは値だと要素のオフセット
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
は本当にそれがキーだが、0がfooであるオフセットでお場合は100です要素を意味している
Array
(//key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
意味は全く無関係ですオフセットによって配列から要素を抽出したい場合は、使用する必要があります。
Thi 3番目の位置にある要素だけを保持する配列を作成します。
ArrayIterator
を使用することもできます。ArrayIterator
あなたは、配列内のオフセット/特定の位置をシークし、そのをフェッチすることができますSeekable
インタフェースを実装しています:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value
別の可能性としては、通常の配列に変換することです:
の$ arraybuff = implode( "~~~"、$ my_arr);
$ my_arr = explode( "~~~"、$ arraybuff);
ここで、「~~~」はデータには発生しない区切り文字です。
オフセットに等しい数値インデックスを使用して配列にアクセスできます。
連想配列を保持する必要がある場合は、別の変数に代入するだけです。
array_keys()
はn番目のキーにアクセスできますが、array_values
はn番目の値を与えます。
<?php
$array = [
0 => 'Zero',
'1' => 'One',
'Two' => 'Two',
];
echo array_values($array)[2];
?>
は '2'を出力します。
利点はありますか?まあ、私が見ることができる唯一のマイナーなものは配列アクセスの数です。 array_keys()
で
あなたは3
array_values()
で、あなただけの2
しかし、一方では、キーは通常小さく、データは非常にネストすることができますので、平均でarray_keys()
を使用する方が安全でしょう。
これを試してください。それはあなたのために働く。
$result= array_values($my_arr); // Array with indexes you need
既にいくつかの回答と受け入れられた回答がある古いスレッドに投稿する場合は注意してください。新しい答えが既存の答えよりも優れている理由を説明する必要があります。 – APC
kありがとうございます。@ APC –
配列が大きい場合、彼らは単に n番目のキー(または値)を取得するために、元のように新しい配列と同じサイズを割り当てるので、array_keys
とarray_values
両方が無駄になります。
array_slice
は整数オフセットを受け入れ、連想配列に作用します。これを使用して、一定時間内に番目のキーを取得(および設定)できます。
// This will at most allocate 2 temporary arrays of 1 element each
$key = array_keys(array_slice($array, $n, 1, true))[0];
$array[$key] = $value;
魅力的な作品です。ありがとう。 – Marty
PHPの開発者は、なぜ直感的ではない配列へのアクセス方法を作成するのでしょうか? – Marty
@Martyこれは、PHP開発者が実装した方法とはあまり関係がありませんが、配列の仕組みについて誤解しています。技術的には、上記は連想的な名前を使用しています。数値索引キーと連想索引キーとの間には相関関係はありません。 – Gordon