2015-05-12 3 views
0

Я использую PHP 5.5.12.PHP массив проверить, существует ли значение в определенном ключе

У меня есть следующий многомерный массив:

[ 
    { 
     "id": 1, 
     "type":"elephant", 
     "title":"Title of elephant" 
    }, 
    { 
     "id": 2, 
     "type":"tiger", 
     "title":"Title of tiger" 
    }, 
    { 
     "id": 3, 
     "type":"lion", 
     "title":"Title of lion", 
     "children":[{ 
      "id": 4, 
      "type":"cow", 
      "title":"Title of cow" 
     }, 
     { 
      "type":"elephant", 
      "title":"Title of elephant" 
     }, 
     { 
      "type":"buffalo", 
      "title":"Title of buffalo" 
     }] 
    } 
] 

Я перебор этого массива, используя foreach петли.

Ключ массива type должен быть в elephant, tiger и lion. Если нет, то результат должен вернуть false.

Как я могу это достичь?

+2

Любой исходный код вы написали до сих пор, что мы можем использовать в качестве модели? – Masiorama

+0

Вы что-то пробовали? –

+0

Итак, вы хотите проверить, имеет ли каждый отдельный ключ (на каждом вложенном уровне) с именем 'type' допустимое значение (из указанных вами)? – someOne

ответ

0

Поскольку вы используете PHP5.5.12, вы может использовать array_column.

$arr = json_decode($json, true); 
//Walk through each element, only paying attention to type 
array_walk(array_column($arr, 'type'), function($element, $k) use(&$arr) { 
    $arr[$k]['valid_type'] = in_array($element, array('lion', 'tiger', 'elephant')); 
}); 

Отсюда, каждый элемент в массиве ($arr) будет иметь новый ключ valid_type с логическим значением - 1 если тип является действительным, 0 если это не так.

https://eval.in/350322

-1

Это что-то, что вы ищете?

foreach($your_array as $item) { 
    if (!array_key_exists('type', $item)) { 
    return FALSE; 
    } 
} 
+0

* Тип ключа массива должен быть слон, тигр и лев. Если нет, тогда результат должен возвращать значение false. * - Это не проверяет значение 'type'. –

-1
function keyExists($arr, $key) { 
    $flag = true; 

    foreach($arr as $v) { 
     if(!isset($v[$key])) { 
      $flag = false; 
      break; 
     } 
    } 

    return $flag; 
} 

Надеется, что это помогает :)

+0

* Тип ключа массива должен быть слон, тигр и лев. Если нет, то результат должен возвращать значение false. * - Ваш код не проверяет значение. –

+0

Мне жаль, что я не понял вопрос правильно. Вы можете просто добавить условие проверки в условие if, и оно будет работать, как ожидалось. –

1

Так что вы хотите проверить, если ваш $myArray содержит значение или нет:

// first get all types as an array 
$type = array_column($myArray, "type"); 

// specify allowed types values 
$allowed_types = ["lion", "elephant", "tiger"]; 

$count = count($type); 
$illegal = false; 

// for loop is better 
for($i = 0; $i < $count; $i++) 
{ 
    // if current type value is not an element of allowed types 
    // array, then both set the $illegal flag as true and break the 
    // loop 
    if(!in_array($type[$i], $allowed_types) 
     $illegal = true; 
     break; 
} 
Смежные вопросы