2015-05-20 2 views
1

У меня есть массив, который может содержать многомерные элементы. Для заполнения флажков из базы данных в форме редактирования мне нужно проверить определенные пары ключ-значение из этого массива.Найти значения в массиве, где некоторые элементы имеют несколько измерений

массив ($ areastools) может выглядеть следующим образом:

array:9 [▼ 
15 => array:2 [▼ 
     0 => 1 
     1 => 4 
16 => 4 
45 => array:2 [▶] 
47 => 4 
50 => array:2 [▶] 
51 => 4 
] 

Первый ключ является Удельным идентификатором ($ площадь-> pivot-> идентификатор), а значения являются идентификаторами инструмента ($ tool-> идентификатор).

В настоящее время у меня есть этот чек, где установлен флажок, если

(array_key_exists($area->pivot->id, $areastools) && 
($areastools[$area->pivot->id] == $tool->id)) 

Это работает для всех элементов массива, которые не являются многомерными. Правильные флажки затем проверяются в форме редактирования.

Но когда два инструмента добавлены в одну и ту же область, отмечены флажки для ни одного из этих инструментов, так как условие не проверяет правильность значений, если в области имеется много инструментов.

Я искал и пытался, но не могу узнать, как это сделать. Кто-нибудь может мне помочь, пожалуйста!

+0

Вы попробуйте проверить, если значение массива? Посмотрите руководство здесь: http://php.net/manual/en/function.is-array.php –

ответ

0

Я сделал бы немного функции. Не очень элегантный, но он работает.

function areaTools($areaTools, $areaId, $toolId) { 
    if(array_key_exists($areaId, $areaTools) { 
     if(is_array($areaTools[$areaId]) { 
      foreach($areaTools[$areaId] as $tool) { 
       if($tool == $toolId;) { 
        return true; 
       } 
      } 
     } else { 
      return $areaTools[$areaId] == $toolId; 
     } 
    } 
} 
+1

Работает безупречно :) Я очень долго боролся с этим, поэтому, хотя мне пришлось обратиться за помощью к радости все еще замечательно, когда он работает :) Спасибо вам большое! – Bergkamp10

0

если вы хотите знать, если определенная пара ключ-значение найдено, используйте array_walk_recursive()

$found=0; 
function find_key_value($v, $k) 
{ 
    global $area,$tool,$found; 
    if (($k==$area->pivot->id)&&($v==$tool->id)) 
     $found=1; 
} 
array_walk_recursive($areastools, 'find_key_value'); 
+0

Спасибо вам большое! Я раньше не использовал эту функцию, и у меня возникла ошибка при попытке ее реализовать (незаконное смещение). Я рассмотрю функцию позже, но теперь я получил форму, которая работает с функцией, упомянутой в приведенном выше ответе. – Bergkamp10

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