2015-03-12 2 views
0

У меня есть следующая пользовательская функция в PHP/Wordpress.Почему print_r и возвращаемые значения возвращаются?

function GetAncestors($post_id, $ancestors = array()) { 

    $query = 'SELECT `wp_terms`.term_id, `wp_terms`.name, `wp_term_taxonomy`.parent FROM `wp_terms` LEFT JOIN `wp_term_taxonomy` ON `wp_terms`.term_id = `wp_term_taxonomy`.term_id WHERE `wp_terms`.term_id = '.$post_id; 
    $term_data = RunQuery($query)[0]; 
    array_push($ancestors,$term_data); 
    if($term_data[parent]!='11') GetAncestors($term_data[parent],$ancestors); 

    else print_r($ancestors); 
    //else return $ancestors; 

} 

Если I print_r массив, он возвращает ожидаемый результат. Если I return значение массива и print_r вне функции (это то, что я хочу сделать), он возвращает пустую строку.

Результаты print_r:

Array ([0] => Array ([term_id] => 95 [name] => PDR (Appraisals) [parent] => 91) [1] => Array ([term_id] => 91 [name] => Your career, learning and development [parent] => 14) [2] => Array ([term_id] => 14 [name] => You At ... [parent] => 11)) 

Почему это?

+0

Отправить эти данные (print_r и после возврата print_r) – sergio

+0

показать вывод также –

+0

@sergio, N.M.N, добавлен вывод. – BFWebAdmin

ответ

1

Если это не будет так:

// Changed ancestors to reference 
// Changed constant 'parent' to string 
function GetAncestors($post_id, &$ancestors = array()) { 

    $query = 'SELECT `wp_terms`.term_id, `wp_terms`.name, `wp_term_taxonomy`.parent FROM `wp_terms` LEFT JOIN `wp_term_taxonomy` ON `wp_terms`.term_id = `wp_term_taxonomy`.term_id WHERE `wp_terms`.term_id = '.$post_id; 
    $term_data = RunQuery($query)[0]; 
    array_push($ancestors,$term_data); 
    if($term_data['parent']!='11') { 
     GetAncestors($term_data['parent'],$ancestors); 
    } 
} 

$ancestors = array(); 
GetAncestors($id, $ancestors); 

print_r($ancestors); 

Лично я бы написать это для утилиты:

function GetAncestors($post_id, &$ancestors = null) { 
    if (null === $ancestors) { 
     $ancestors = array(); 
    } 

    $query = 'SELECT `wp_terms`.term_id, `wp_terms`.name, `wp_term_taxonomy`.parent FROM `wp_terms` LEFT JOIN `wp_term_taxonomy` ON `wp_terms`.term_id = `wp_term_taxonomy`.term_id WHERE `wp_terms`.term_id = '.$post_id; 
    $result = RunQuery($query); 

    if (count($result) > 0) { 
     $count = 1; 
     $term_data = $result[0]; 
     array_push($ancestors,$term_data); 

     if($term_data['parent']!='11') { 
      $count += GetAncestors($term_data['parent'],$ancestors); 
     } 

     return $count; 
    } 

    return 0; 
} 

if (GetAncestors($id, $ancestors) > 0) { 
    print_r($ancestors); 
} 
0

Используйте обратный флаг:

print_r($ancestors, true); 

С php doc: http://php.net/manual/en/function.print-r.php

Если вы хотите захватить вывод print_r(), используйте параметр return . Когда этот параметр установлен в значение ИСТИНА, print_r() вернет информацию, а не распечатает ее.

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