web-dev-qa-db-ja.com

PHP:配列からキーを取得しますか?

これは非常に簡単で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
        )

)
53
Industrial

key() を使用できます。

<?php
$array = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "four" => 4
);

while($element = current($array)) {
    echo key($array)."\n";
    next($array);
}
?>
63
vtorhonen

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;
40
Sarfraz
$foo = array('a' => 'Apple', 'b' => 'ball', 'c' => 'coke');

foreach($foo as $key => $item) {
  echo $item.' is begin with ('.$key.')';
}
30

$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
14
sushil bharwani

質問で説明したIS foreachループの場合、$key => $valueを使用すると高速で効率的です。

6
Dogbert

foreachループになりたい場合は、foreach($array as $key => $value)が間違いなく推奨されるアプローチです。言語が提供する単純な構文を活用してください。

1
Mike Lang

以下は、配列ライブラリに追加できる一般的なソリューションです。必要なのは、関連付けられた値とターゲット配列を提供することだけです!

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;
}
0

これを試して

foreach(array_keys($array) as $nmkey)
    {
        echo $nmkey;
    }
0
Chamandeep

Foreachループでkey($ array)を使用するもう1つの方法は、ループの最後でnext($ array)を使用することです。各ループがnext()関数を呼び出すことを確認してください(ループ内に複雑な分岐がある場合)

0
B Rad C