PHP - 数值作为关联数组中的键

时间:2017-10-26 16:41:09

标签: php arrays multidimensional-array associative-array

示例数组:

Array
(
    [en] => Array
        (
            [active] => 0
            [default_locale] => en_US
        )

    [es] => Array
        (
            [active] => 1
            [default_locale] => es_ES
        )

    [de] => Array
        (
            [active] => 0
            [default_locale] => de_DE
        )

    [fr] => Array
        (
            [active] => 0
            [default_locale] => fr_FR
        )
)

我需要密钥关闭数组有效 1 。 我知道我可以通过数组循环找到它,但是有没有更好的方法呢?

我搞砸了:

array_search('1', array_column($array, 'active'));

而不是命名键,我得到它的数字位置,在这个例子中它是1,但我需要es

最后$array[1]没有输出任何内容。

3 个答案:

答案 0 :(得分:2)

如果您不想使用for循环。考虑到你只有一种活跃的语言。如果您有多个,将首先出现。

$array =  array(
    'en' => array('active' => '0', 'default_locale' => 'en_US',),
    'es' => array('active' => '1','default_locale' => 'es_ES',),
    'de' => array('active' => '0','default_locale' => 'de_DE', ),
    'fr' => array('active' => '0','default_locale' => 'fr_FR', )
);
// get all the keys of your array
$array_keys = array_keys($array);
// serach for active language
$search =  array_search('1', array_column($array, 'active'));
// named key
$named_key = $array_keys[$search]; // returns 'es' in this case.
// print your active array
print_r($array[$named_key]);

Out put:

Array
(
    [active] => 1
    [default_locale] => es_ES
)

答案 1 :(得分:0)

除了Ravinder Reddy的好答案之外;因为我们知道default_locale包含数组中键的一部分,所以只需提取active并使用default_locale索引,然后取前2个字符:

$key = substr(array_search('1', array_column($array, 'active', 'default_locale')), 0, 2);

这不是一般解决方案,并且特定于此数组结构,它只返回active = 1en)所在的第一个键。

答案 2 :(得分:-2)

我会使用类似这个迭代器的东西。它很有效,而且很简单,没有研究项目; - )

<?php // demo/temp_rhymeguy.php
/**
 * https://stackoverflow.com/questions/46959599/php-numeric-value-as-key-in-associative-array
 */
ini_set('display_errors', TRUE);
error_reporting(E_ALL);

echo '<pre>';

// COLLECT RESULTS HERE
$actives = [];

// TEST DATA
$main = Array
(
    'en' => Array
        (
            'active' => 1,
            'default_locale' => 'en_US'
        ),

    'es' => Array
        (
            'active' => 1,
            'default_locale' => 'es_ES'
        ),

    'de' => Array
        (
            'active' => 0,
            'default_locale' => 'de_DE'
        ),

    'fr' => Array
        (
            'active' => 0,
            'default_locale' => 'fr_FR'
        ),
);

foreach ($main as $key => $sub_array)
{
    if ($sub_array['active'] == 1) $actives[] = $key;
}
// SHOW THE ORIGINAL AND THE RESULTS
var_dump($main, $actives);