2017-01-28 2 views
0

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

foreach ($data as $row) { 
    $get_options = categoryWithSubcategories(0, 0,$row['location_id'],$dbConn); 
    // here I am passing $row['location_id'] to this function, but it merge prvious data within next loop. 
} 

Рекурсивная функция ниже.

function categoryWithSubcategories($current_cat_id, $count,$locationId,$dbConn) 
{ 
    static $option_results; 
    // if there is no current category id set, start off at the top level (zero) 
    if (!isset($current_cat_id)) { 
     $current_cat_id =0; 
    } 
    // increment the counter by 1 
    $count = $count+1; 
    // query the database for the sub-categories of whatever the parent category is 
    $sql = "SELECT cat_id, cat_name from tbl_category where cat_parent_id = $current_cat_id and locationid=$locationId and delete_flag='0'"; 
    $stmt = $dbConn->prepare($sql); 
    $result =$stmt->execute(); 
    $data = $stmt->fetchAll(); 
    $num_options = $stmt->rowCount(); 
    if ($num_options > 0) { 
     foreach ($data as $categoryList) { 
      // if its not a top-level category, indent it to 
      //show that its a child category 
      if ($current_cat_id!=0) { 
       $indent_flag = ' '; 
       for ($x=2; $x<=$count; $x++) { 
        $indent_flag .= ' >> '; 
       } 
      } 
      $cat_name = $indent_flag.$categoryList['cat_name']; 
      $option_results[$categoryList['cat_id']] = $cat_name; 
      // now call the function again, to recurse through the child categories 
      categoryWithSubcategories($categoryList['cat_id'], $count,$locationId,$dbConn); 
     } 
    } 
    return $option_results; 
} 
+0

вы думали об изменении SQL, чтобы восстановить всю информацию вам нужно? – atoms

+0

Вам не хватает заявления о возврате? 'return categoryWithSubcategories ($ categoryList ['cat_id'], $ count, $ locationId, $ dbConn);' внутри цикла foreach – Sepultura

ответ

1

В функции categoryWithSubcategories() Вы определили $ option_results как статические. Это и есть причина, по которой результаты объединены/добавлены в каждую новую итерацию.

Вы можете попробовать: 1. Удалить статическую информацию из $ option_results. 2. Сохраните результат из категории функцийWithSubcategories() в нижней строке.

categoryWithSubcategories($categoryList['cat_id'], $count,$locationId,$dbConn); 

Это можно записать в виде

$option_results = array_merge(categoryWithSubcategories($categoryList['cat_id'], $count,$locationId,$dbConn), $option_results) ; 
+0

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

+0

Не могли бы вы объяснить, почему он не работает? Разве это не дает ожидаемого результата или это бросает какую-то ошибку? –

+0

Это предупреждение throw_merge() Первое значение не является массивом. –

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

  • Нет связанных вопросов^_^