示例数组:
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]
没有输出任何内容。
答案 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 = 1
(en
)所在的第一个键。
答案 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);