web-dev-qa-db-ja.com

PHP array_column-キーを保持する方法は?

    $items = array(
        1 => [
            "id" => 5
        ],

        3 => [
            "id" => 6
        ],
        4 => [
            "id" => 7
        ],
    );

    var_dump(array_column($items,"id"));

結果、

array (size=3)
  0 => int 5
  1 => int 6
  2 => int 7

しかし、どうすれば$itemsのキーを保持して、これを以下で取得できるようにできますか?

array (size=3)
  1 => int 5
  3 => int 6
  4 => int 7
13
laukok
foreach(key($parameters) as $key)
{
print($key);
}

必要に応じて、その結果を他の変数に格納することもできます。

そして、キーと値の両方を表示するには、これを試してください。

foreach ($parameters as $key => $value) {
echo $key . ' = ' . $value . '<br>';
}
1
wie5Ooma

これが役立つかどうかを確認してください

array_filter(array_combine(array_keys($items), array_column($items, 'id')));
21

これは、ループや反復なしでキーを保持するための最速の方法だと思います

array_diff(array_combine(array_keys($items), array_column($items, 'id')), [null])
7
Igor Tashlykov

同じ解決策を探して、いくつかのトリックを組み合わせて、私はこれを作成しました:

$userdb=Array
(
    "test1" => array
    (
        'uid' => '100',
        'name' => 'Sandra Shush',
        'url' => 'urlof100'
    ),
    "test2" => array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    ),
    "test3" => array
    (
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )
);

echo $key = array_search(
    40489,
    array_filter(
        array_combine(
            array_keys($userdb),
            array_column(
                $userdb, 'uid'
            )
        )
    )
);

結果は「test3」です。

配列番号または名前付き配列で作業します。

4
Bruno Rigolon

array_column_keysと同じパラメータを持つ単純な関数array_columnを作成しました。

/**
 * Return the values from a single column in the input array by keeping the key
 *
 * @param array $array     A multi-dimensional array (record set) from which to pull a column of values.
 * @param mixed $column    The column of values to return. This value may be the integer key of the column you wish to retrieve, or it may be the string key name for an associative array. It may also be NULL to return complete arrays (useful together with index_key to reindex the array).
 * @param mixed $index_key [optional] The column to use as the index/keys for the returned array. This value may be the integer key of the column, or it may be the string key name.
 *
 * @return array Returns an array of values representing a single column from the input array.
 */
function array_column_keys($array, $column, $index_key = null)
{
    $output = [];

    foreach ($array as $key => $item) {
        $output[@$item[$index_key] ?? $key] = @$item[$column];
    }

    return array_filter($output, function($item) {
        return null !== $item;
    });
}

3番目のパラメーターindex_keyは、私も必要なものです。これは、次の例のように3番目のパラメーターをnullに設定するときの質問に答えます。

$result = array_column_keys($items, 'id');

...そして、キーの値を定義しましょう

$result = array_column_keys($items, 'id', 'any_key');

これにより、

array (size=3)
 string 'any_value1' => int 5
 string 'any_value2' => int 6
 string 'any_value3' => int 7
2
algorhythm

もう1つの方法は、 array_map を使用することです。

$result = array_map(function($item) {return $item['id'];}, $items);

2
ajp