代码之家  ›  专栏  ›  技术社区  ›  RhymeGuy

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

  •  1
  • RhymeGuy  · 技术社区  · 7 年前

    示例阵列:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Ravinder Reddy    7 年前

    如果你不想使用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]);
    

    输出:

    Array
    (
        [active] => 1
        [default_locale] => es_ES
    )
    
        2
  •  0
  •   AbraCadaver    7 年前

    除了Ravinder Reddy的伟大回答;因为我们知道 default_locale 包含数组中的部分键,只需提取 active 和索引 然后取前2个字符:

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

    这不是一般的解决方案,特定于此数组结构,它只返回第一个键,其中 active = 1 en ).

        3
  •  -2
  •   Ray Paseur    7 年前

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

    <?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);