2015-08-19 7 views
6

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

Array 
(
    [0] => Array 
     (
      [expanded] => 1 
      [key] => _1 
      [title] => New 
     ) 

    [1] => Array 
     (
      [key] => _2 
      [title] => Home 
     ) 

    [2] => Array 
     (
      [expanded] => 1 
      [key] => _3 
      [title] => Care 
      [children] => Array 
       (
        [0] => Array 
         (
          [expanded] => 1 
          [key] => _4 
          [title] => face 
          [children] => Array 
           (
            [0] => Array 
             (
              [key] => _5 
              [title] => new 
             ) 

            [1] => Array 
             (
              [key] => _6 
              [title] => <strong>face timeline</strong> 
              [data] => Array 
               (
                [url] => http://localhost/patient/face-timeline/ 

                [type] => content 
                [cid] => 2291 
                [timeline] => 0 
               ) 

              [children] => Array 
               (
                [0] => Array 
                 (
                  [key] => _2278 
                  [title] => Post Op Visit 
                 ) 

                [1] => Array 
                 (
                  [key] => _2277 
                  [title] => Surgery 
                 ) 

                [2] => Array 
                 (
                  [key] => _2276 
                  [title] => Pre-Op 
                 ) 

                [3] => Array 
                 (
                  [key] => _2275 
                  [title] => Consultation 
                 ) 

                [4] => Array 
                 (
                  [key] => _2274 
                  [title] => Reseach 
                 ) 

               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

) 

Из этого массива я хочу этот массив (ниже):

Array 
(
    [key] => _6 
    [title] => <strong>face timeline</strong> 
    [data] => Array 
     (
      [url] => http://localhost/patient/face-timeline/ 
      [type] => content 
      [cid] => 2291 
      [timeline] => 0 
     ) 

    [children] => Array 
     (
      [0] => Array 
       (
        [key] => _2278 
        [title] => Post Op Visit 
       ) 

      [1] => Array 
       (
        [key] => _2277 
        [title] => Surgery 
       ) 

      [2] => Array 
       (
        [key] => _2276 
        [title] => Pre-Op 
       ) 

      [3] => Array 
       (
        [key] => _2275 
        [title] => Consultation 
       ) 

      [4] => Array 
       (
        [key] => _2274 
        [title] => Reseach 
       ) 

     ) 

) 

Вот что я пытался

function recursion($array,$postid) { 

    foreach ($array as $key=>$value) { 

     if((isset($value['data']['cid'])) && ($value['data']['cid'] == $postid)){ 

      $tmp = $value; 
       return $value; 

     } 
     if (is_array($value)) 
     { 

      recursion($value,$postid); 
     } 
    } 

} 

Эта функция не возвращает значения.
Здесь $postid является 2291. То есть я ищу и я могу напечатать этот массив, но не может в состоянии вернуть значение Вот link

+1

Где мой код? – artsylar

+0

С примером массива, пожалуйста, также добавьте код здесь или в скрипте –

ответ

1

Если вы хотите получить только определенное использование значения этого:

function recursive($your_array) 
    { 
     $newArray = []; 

     foreach ($your_array as $key => $val) { 
      if (array_keys($your_array) == 'children') { 
       foreach($val as $key2 => $val3){ 
        $newArray[] = recursive($val3); 
       } 
      } 
     } 
     print_r($newArray); 
    } 
+0

У меня есть еще несколько шкал времени, и это не работает для него. –

+0

@milanpatel Теперь он работает? – aldrin27

+0

Нет сожаления, что он не работает. :( –

0

Это даст вам свой результат:

$searchedData = searchCustomRecursive('2291',$userdb); 

function searchCustomRecursive($searchString, $array, $previousArray= Array()){ 
    if(is_Array($array)){ 
     $newArray = recursive_array_search($searchString,$array); 
     if(is_Array($newArray)){ 
      searchCustomRecursive($searchString, $newArray,$array); 
     }else{ 
      print_r($previousArray); // Check your result here... 
      return $previousArray; 
     } 

    } 
} 

function recursive_array_search($needle,$haystack) { 
    foreach($haystack as $key=>$value) { 
     $current_key=$key; 
     if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) { 
      return $value; 
     } 
    } 
    return false; 
} 
Смежные вопросы