2016-11-25 3 views
0

У меня есть следующий многомерный массив, и я хочу получить разницу, если в этом массиве есть только один массив или массив.Получите разницу между одним подмассивом или несколькими подмассивами в многомерном массиве

Например:

  • В массиве [1] имеется только один суб Массив [Пример]
  • В массиве [2] есть два суб Массивы [пример]

[content] => Array 
 
     (
 
      [...] 
 
      [1] => Array 
 
       (
 
        [example] => Array 
 
         (
 
          [value] => GET THIS 
 
          [attr] => Array 
 
           (
 
            [...] 
 
           ) 
 
         ) 
 
       ) 
 
      [2] => Array 
 
       (
 
        [example] => Array 
 
         (
 
          [0] => Array 
 
           (
 
            [value] => GET THIS 
 
            [attr] => Array 
 
             (
 
              [...] 
 
             ) 
 
           ) 
 
          [1] => Array 
 
           (
 
            [value] => GET THIS 
 
            [attr] => Array 
 
             (
 
              [...] 
 
             ) 
 
           ) 
 
         ) 
 
       )

Теперь, чтобы получить [значение] из первого массива I хотел бы попробовать:

foreach ($content as $example) { 
    echo($content['example']['value']); 
} 

И получить каждый [значение] из второго массива я бы попробовать:

foreach ($content as $example) { 
    foreach ($example as $values) { 
     echo($value['value']); 
    } 
} 

До сих пор так хорошо, но как я могу решить, какие функции для запуска? Я что-то упускаю? Есть ли инструкция if, которая может мне помочь?

Что-то вроде:

if(multiple sub-arrays){ 
    // do first code example 
} else { 
    // do second code example 
} 

Я просто хочу способ получить все значения, называемые [значение] из массива.

Спасибо заранее!

+0

Я дважды читал ваш вопрос и все еще не могу понять, в чем проблема, которую вы пытаетесь решить. Можете ли вы привести пример конечного результата, который вы ожидаете получить? –

ответ

1

Наиболее очевидным решением является изменение функции, которая генерирует ваш content массив, так как он всегда генерирует вложенные массивы в формате, как :

[content] => Array 
     (
      [...] 
      [1] => Array 
       (
        [example] => Array 
         (
          [0] => Array 
           (
            [value] => GET THIS 
            [attr] => Array 
             (
              [...] 
             ) 
           ) 
         ) 
       ) 
      [2] => Array 
       (
        [example] => Array 
         (
          [0] => Array 
           (
            [value] => GET THIS 
            [attr] => Array 
             (
              [...] 
             ) 
           ) 
          [1] => Array 
           (
            [value] => GET THIS 
            [attr] => Array 
             (
              [...] 
             ) 
           ) 
         ) 
       ) 

Но если у вас нет такого варианта - использовать простую проверку:

foreach ($content as $item) { 
    // here check if your `$item` has an `value` subkey under `example` key 
    if (array_key_exists('value', $item['example'])) { 
     echo($item['example']['value']); 
    } else { 
     foreach ($item['example'] as $values) { 
      echo ($values['value']); 
     } 
    } 
} 
+0

Спасибо большое! Да, я не смог изменить свою конструкторскую функцию. Итак, это решение, которое я искал :) –

0

Предполагая, что ваш окончательный размер ВСЕГДА в качестве узла «значение»:

function arrayIterate($array){ 
    foreach ($content as $example) { 
     if(!isset($example['value'])){ 
      arrayIterate($example); 
     }else{ 
      echo($example['value']); 
     } 
    } 
} 
Смежные вопросы