2016-10-24 6 views
0

Я преобразовываю XML-файл в ассоциативный массив, чтобы вытащить данные, проблема в том, что я должен сделать 10 циклов, зависит от числа массивов, чтобы получить данные.Как получить конкретные данные из многомерного массива

Есть ли лучший способ получить данные столбца без создания множества циклов? потому что я хочу назначить их переменным.

массива, который я пытаюсь получить данные из

Array 
(
    [catalog] => Array 
     (
      [book] => Array 
       (
        [0] => Array 
         (
          [took] => Array 
           (
            [dodo] => Array 
             (
              [ahmadz] => Array 
               (
                [lolo] => Array 
                 (
                  [author] => Ralls, Kim 
                  [title] => Midnight Rain 
                  [genre] => Fantasy 
                  [price] => 5.95 
                  [publish_date] => 2000-12-16 
                  [description] => A former architect battles corporate zombies, 
           an evil sorceress, and her own childhood to become queen 
           of the world. 
                 ) 

               ) 

             ) 

           ) 

         ) 

        [1] => Array 
         (
          [took] => Array 
           (
            [dodo] => Array 
             (
              [ahmadz] => Array 
               (
                [lolo] => Array 
                 (
                  [author] => Ralls, Kim 
                  [title] => Midnight Rain 
                  [genre] => Fantasy 
                  [price] => 5.95 
                  [publish_date] => 2000-12-16 
                  [description] => A former architect battles corporate zombies, 
           an evil sorceress, and her own childhood to become queen 
           of the world. 
                 ) 

               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

) 

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

echo $array['author']; 

при условии, что у меня есть много данных автора, а не один, как в примере выше

Пожалуйста, помогите !.

Edited .....................

Array 
(
    [catalog] => Array 
     (
      [book] => Array 
       (
        [0] => Array 
         (
          [took] => Array 
           (
            [dodo] => Array 
             (
              [ahmadz] => Array 
               (
                [lolo] => Array 
                 (
                  [tata] => Array 
                   (
                    [author] => jac1 
                    [title] => Midnight Rain1 
                    [genre] => Fantasy 
                    [price] => 5.95 
                    [publish_date] => 2000-12-16 
                    [description] => A former architect battles corporate zombies. 
                   ) 

                  [tata2] => Array 
                   (
                    [author] => jack2 
                    [title] => Midnight Rain1 
                    [genre] => Fantasy 
                    [price] => 5.95 
                    [publish_date] => 2000-12-16 
                    [description] => A former architect battles corporate zombies. 
                   ) 

                 ) 

               ) 

             ) 

           ) 

         ) 

        [1] => Array 
         (
          [took] => Array 
           (
            [dodo] => Array 
             (
              [ahmadz] => Array 
               (
                [lolo] => Array 
                 (
                  [tata] => Array 
                   (
                    [author] => jack3 
                    [title] => Midnight Rain1 
                    [genre] => Fantasy 
                    [price] => 5.95 
                    [publish_date] => 2000-12-16 
                    [description] => A former architect battles corporate zombies. 
                   ) 

                  [tata2] => Array 
                   (
                    [author] => jack4 
                    [title] => Midnight Rain1 
                    [genre] => Fantasy 
                    [price] => 5.95 
                    [publish_date] => 2000-12-16 
                    [description] => A former architect battles corporate zombies. 
                   ) 

                 ) 

               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

) 

Как вы видите выше, я просто хочу, чтобы получить значение, которое имеет родительские ключи не TATA tata2

так что я могу вставить их отдельно в базу данных

+0

Я не совсем понимаю проблемы. Вы можете получить автора, используя '$ array ['catalog'] ['book'] ['took'] ['dodo'] ['ahmadz'] ['lolo'] ['author']', без каких-либо циклов. Возможно, вы упростили массив настолько, что проблема не очевидна, и это поможет показать хотя бы часть немодифицированного входного массива. – BlueM

+0

Я думаю, вам лучше использовать XML-парсер, если вы хотите получить более чистый код. Что-то вроде xpath должно позволить вам легко захватывать данные из любой точки внутри XML-структуры. http://us2.php.net/manual/en/simplexmlelement.xpath.php – dgig

+0

Я попытался вытащить данные через XML, но имена родителей отличаются друг от друга, поэтому я не могу написать один путь к получить все данные. Также я не разбираюсь в xml, поэтому я попытался преобразовать его в массив, который медленнее, но проще !. –

ответ

1

Попробуйте ниже кода, который даст вам все автор, как массив из многомерного массива без использования forloops .., а также, если вы хотите получить другие значения из многомерного массива то вам нужно передать ключ массива в in_array при условии if и подготовить согласование данных ИНГ вашего требования ...

$author_array = array(); 
array_walk_recursive($your_multidimentional_array, function($value, $key) { 
    if (in_array($key, array("author"))) { 
     global $author_array; 
     $author_array[] = $value; 
    } 
}); 
print_r($author_array); 

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

+1

Пожалуйста, не используйте глобальную переменную для таких ситуаций (или лучше: * не * используйте глобальные * вообще *). Если вам нужно изменить переменную во внешней области действия внутри замыкания, определите ее там, передайте ее через ссылку на закрытие [например: 'use (& $ varname)'] и напишите ему внутри закрытия. – BlueM

+0

Спасибо, что он работает безупречно. Я ценю вашу помощь ^^ –

+0

если у нас есть lolo и lolo2, возможно ли получить данные только для lolo? –

1

Также можно создать свою собственную рекурсивную функцию и отфильтровать нужные значения из массива затем построить собственный массив как Лол = > автор и lolo1 => автор .... из многомерного массива, как показано ниже ...

function my_walk_recursive($your_multidimentional_array, $find_value, &$filtered_array) { 
    foreach($your_multidimentional_array as $key => $data) {     
     if($data[$find_value] != '') { 
      $filtered_array[$key] = $data['author']; 
      return true; 
     } 
     elseif(is_array($data) && (!empty($data))) { 
      $result = my_walk_recursive($data, $find_value, $filtered_array); 
      if($result == true) { 
       continue; 
      } 
     }   
    } 
    return $filtered_array; 
} 
$filtered_array = array(); 
$final_array = array(); 
$final_array = my_walk_recursive($test_array, 'author', $filtered_array); 
var_dump($final_array); 

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

+0

Я действительно не знаю, как поблагодарить вас за усилия, которые вы оказали мне на помощь. Большое спасибо. Я только что редактировал вопрос, чтобы сделать его более ясным. Я попытался вставить tata в «$ find_value», но ничего не получил. Я просто хочу получить значения с ключом tata. если у вас есть время наверняка. вы сделали больше, чем достаточно для меня –

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