2015-04-04 167 views
0

遞歸函數不太好。我閱讀了所有的論壇,並試圖圍繞需要完成的事情,我無法得到它,而且我的時間不夠了。所以我需要尋求幫助。我有以下數組。我試圖讓所有公司都在一個層面上。所以返回的結果是,第一個元素將是元素0,那麼all_child_companies下的第一個節點將是元素1等遞歸。Php - 遞歸遞歸函數,以獲得父級的所有節點

<?php 

// array(
// 'id' => '1', 
// 'name' => 'Company 1', 
// 'address_id' => '15', 
// 'emp_size' => '0', 
// 'parent_id' => '0', 
// 'is_beta' => '0', 
// 'owner_id' => '1', 
// 'created_at' => '2015-04-02 03:25:32', 
// 'updated_at' => '2015-04-02 03:25:32', 
// 'deleted_at' => NULL, 
// 'industry' => '', 
// 'avatar_file_name' => NULL, 
// 'avatar_file_size' => NULL, 
// 'avatar_content_type' => NULL, 
// 'avatar_updated_at' => NULL, 
// 'address' => array(
//  'id' => '15', 
//  'street1' => '111 something street', 
//  'street2' => '', 
//  'street3' => '', 
//  'city' => 'houston', 
//  'state' => '0', 
//  'zip' => '', 
//  'created_at' => '2015-04-02 03:25:32', 
//  'updated_at' => '2015-04-02 03:25:32', 
//  'deleted_at' => NULL, 
//  'address_id' => '0', 
//  'address_type' => '', 
//  'country' => '' 
// ), 
// 'all_child_companies' => array(
//  0 => array(
//  'id' => '2', 
//  'name' => 'Company 1', 
//  'address_id' => '16', 
//  'emp_size' => '55', 
//  'parent_id' => '1', 
//  'is_beta' => '1', 
//  'owner_id' => '1', 
//  'created_at' => '2015-04-02 03:25:32', 
//  'updated_at' => '2015-04-02 03:25:32', 
//  'deleted_at' => NULL, 
//  'industry' => '', 
//  'avatar_file_name' => NULL, 
//  'avatar_file_size' => NULL, 
//  'avatar_content_type' => NULL, 
//  'avatar_updated_at' => NULL, 
//  'address' => array(
//   'id' => '16', 
//   'street1' => '222 something street', 
//   'street2' => '', 
//   'street3' => '', 
//   'city' => 'tucson', 
//   'state' => '0', 
//   'zip' => '', 
//   'created_at' => '2015-04-02 03:25:32', 
//   'updated_at' => '2015-04-02 03:25:32', 
//   'deleted_at' => NULL, 
//   'address_id' => '0', 
//   'address_type' => '', 
//   'country' => '' 
//  ), 
//  'all_child_companies' => array(
//   0 => array(
//   'id' => '3', 
//   'name' => 'Company 2', 
//   'address_id' => '17', 
//   'emp_size' => '15', 
//   'parent_id' => '2', 
//   'is_beta' => '0', 
//   'owner_id' => '1', 
//   'created_at' => '2015-04-02 03:25:32', 
//   'updated_at' => '2015-04-02 03:25:32', 
//   'deleted_at' => NULL, 
//   'industry' => '', 
//   'avatar_file_name' => NULL, 
//   'avatar_file_size' => NULL, 
//   'avatar_content_type' => NULL, 
//   'avatar_updated_at' => NULL, 
//   'address' => array(
//    'id' => '17', 
//    'street1' => '333 something street', 
//    'street2' => '', 
//    'street3' => '', 
//    'city' => 'tempe', 
//    'state' => '0', 
//    'zip' => '', 
//    'created_at' => '2015-04-02 03:25:32', 
//    'updated_at' => '2015-04-02 03:25:32', 
//    'deleted_at' => NULL, 
//    'address_id' => '0', 
//    'address_type' => '', 
//    'country' => '' 
//   ), 
//   'all_child_companies' => array(
//    0 => array(
//    'id' => '4', 
//    'name' => 'Company 3', 
//    'address_id' => '19', 
//    'emp_size' => '100', 
//    'parent_id' => '3', 
//    'is_beta' => '0', 
//    'owner_id' => '0', 
//    'created_at' => '2015-04-02 05:24:34', 
//    'updated_at' => '2015-04-02 05:24:34', 
//    'deleted_at' => NULL, 
//    'industry' => '', 
//    'avatar_file_name' => NULL, 
//    'avatar_file_size' => NULL, 
//    'avatar_content_type' => NULL, 
//    'avatar_updated_at' => NULL, 
//    'address' => array(
//     'id' => '19', 
//     'street1' => '333 something street', 
//     'street2' => '', 
//     'street3' => '', 
//     'city' => 'phoenix', 
//     'state' => '0', 
//     'zip' => '85042', 
//     'created_at' => '2015-04-02 05:24:34', 
//     'updated_at' => '2015-04-02 05:24:34', 
//     'deleted_at' => NULL, 
//     'address_id' => '0', 
//     'address_type' => '', 
//     'country' => 'United States Of America' 
//    ), 
//    'all_child_companies' => array(
// 
//    ) 
//   ) 
//   ) 
//  ) 
//  ) 
// ) 
// ) 
//) 

非常感謝您的幫助。

我知道這不工作,但它是我不斷正在添加了..

/** 
* @param $needle_key 
* @param $array 
* @return bool 
*/ 
public static function array_search_key($needle_key = 'all_child_companies', $array) 
{ 
    if(isset($array['all_child_companies']) && !empty($array['all_child_companies'])){ 
     return self::array_search_key($needle_key, $array['all_child_companies']); 
    } 

    foreach ($array AS $key => $value) { 
     if ($key == $needle_key) return $value; 
     if (is_array($value)) { 
      if (($result = self::array_search_key($needle_key, $value)) !== false) 
       return $result; 
     } 
    } 
    return false; 
} 
+0

到目前爲止您試過了什麼?向我們顯示您當前的代碼:) – 2015-04-04 15:10:16

+0

我用代碼示例更新了問題。林不知道,如果論壇通知每個人的更新.. – 2015-04-04 15:24:50

+0

它通知。在我的腦海中,你需要一個foreach來完成你想要的東西。 – 2015-04-04 15:28:46

回答

2

下面是一個簡單,工作液:

function resolveRecursion(array $result, array $array) { 
    $result[] = $array; //add the current company to the result 

    foreach($array['all_child_companies'] as $childCompany) { 
     $result = resolveRecursion($result, $childCompany); //add all the children companies to the result 
    } 

    return $result; 
} 

$result = resolveRecursion([], $yourCompaniesArray); 
+0

謝謝函數resolveRecursion是我使用的解決方案。這十分完美。謝謝 – 2015-04-04 16:17:20

1

你可以嘗試它就像這個功能:

function flatten_array($needle_key, $array) { 
    $result = array($array); 
    foreach ($array[$needle_key] as $key => $value) { 
    $result = array_merge($result, flatten_array($needle_key, $value)); 
    unset($result[0][$needle_key][$key]); 
    } 
    return $result; 
}