これは非常に簡単でPHPの組み込み関数であると確信していますが、まだ見ていません。
ここで私がやっていることは次のとおりです。
foreach($array as $key => $value) {
echo $key; // Would output "subkey" in the example array
print_r($value);
}
代わりに次のようなことをして、すべてのforeachループで「$ key => $ value」を書くのを省くことができますか? (擬似コード)
foreach($array as $subarray) {
echo arrayKey($subarray); // Will output the same as "echo $key" in the former example ("subkey"
print_r($value);
}
ありがとう!
配列:
Array
(
[subKey] => Array
(
[value] => myvalue
)
)
key() を使用できます。
<?php
$array = array(
"one" => 1,
"two" => 2,
"three" => 3,
"four" => 4
);
while($element = current($array)) {
echo key($array)."\n";
next($array);
}
?>
array_search
関数を使用します。
php.netの例
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;
$foo = array('a' => 'Apple', 'b' => 'ball', 'c' => 'coke');
foreach($foo as $key => $item) {
echo $item.' is begin with ('.$key.')';
}
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
質問で説明したIS foreach
ループの場合、$key => $value
を使用すると高速で効率的です。
foreach
ループになりたい場合は、foreach($array as $key => $value)
が間違いなく推奨されるアプローチです。言語が提供する単純な構文を活用してください。
以下は、配列ライブラリに追加できる一般的なソリューションです。必要なのは、関連付けられた値とターゲット配列を提供することだけです!
PHPマニュアル:array_search() (他の言語の.indexOf()と同様)
public function getKey(string $value, array $target)
{
$key = array_search($value, $target);
if ($key === null) {
throw new InvalidArgumentException("Invalid arguments provided. Check inputs. Must be a (1) a string and (2) an array.");
}
if ($key === false) {
throw new DomainException("The search value does not exists in the target array.");
}
return $key;
}
これを試して
foreach(array_keys($array) as $nmkey)
{
echo $nmkey;
}
Foreachループでkey($ array)を使用するもう1つの方法は、ループの最後でnext($ array)を使用することです。各ループがnext()関数を呼び出すことを確認してください(ループ内に複雑な分岐がある場合)