2017-01-07 12 views
1

Для простых массивов с парами значений ключей мы можем легко найти ключ на основе значения с помощью array_search(). Но у меня есть массив, в котором значения могут быть строкой или массивом, и нужно найти ключ, в котором значение представляет собой массив с определенными ключами.Как найти ключ, где значение - массив с определенным ключом, используя php?

$myArray = array(
    0 => string_value, 
    1 => string_value2, 
    3 => array(
     'config' => array(
      'option1' => value1, 
      'option2' => value2, 
     ), 
     ), 
    4 => string_value3, 
); 

Мне нужно найти ключ для элемента, в котором массив ребенок имеет ключ config - то есть я должен искать для конфигурации и возврата 3.

Я бы предпочел не перебирать массив. Неважно, если это единственный вариант. Но мне интересно, есть ли более элегантный способ найти этот ключ.

+0

Нет другого способа, кроме проверки каждого элемента. –

+0

И вы пробовали КАК? – RiggsFolly

+0

Если у вас уже есть способ сделать это (как итерация по всем элементам), и просто задайтесь вопросом, есть ли лучший способ, я бы рекомендовал опубликовать ваше рабочее решение на [Code Review] (http://codereview.stackexchange.com/). –

ответ

1

использования array_filter фильтровать массив конфигурации.

$o = array_filter($array, function($v){return !empty($v['config']) ? true : false;}); 
var_dump(array_keys($o)); 
+1

Это было, безусловно, самое элегантное решение. – lcdservices

0

Вы должны перебирать элементы массива и проверять значение каждого элемента в цикле. Проверьте, установлен ли $item["config"] в цикле, указатель возврата элемента цикла.

$index; 
foreach ($myArray as $key => $item){ 
    if (isset($item["config"])) 
     $index = $key; 
} 
echo $index; 

См результат кода в demo

+0

И добавьте 'break' –

+0

@MagnusEriksson Если' $ item ['config'] 'allway является массивом, вы можете использовать' is_array() ', но в вопросе оба они работают. – Mohammad

+1

Вы правы. Я неправильно понял вопрос. Он хочет, чтобы '$ item' был массивом, а не обязательно' $ item ['config'] '. –

 Смежные вопросы

  • Нет связанных вопросов^_^