2012-08-13 53 views
4

比方說,我有一個這樣的數組:array_values遞歸PHP

Array 
(
    [id] => 45 
    [name] => john 
    [children] => Array 
    (
     [45] => Array 
      (
       [id] => 45 
       [name] => steph 
       [children] => Array 
        (
         [56] => Array 
          (
           [id] => 56 
           [name] => maria 
           [children] => Array 
            (
             [60] => Array 
              (
               [id] => 60 
               [name] => thomas 
              ) 

             [61] => Array 
              (
               [id] => 61 
               [name] => michelle 
              ) 

            ) 
          ) 

         [57] => Array 
          (
           [id] => 57 
           [name] => luis 
          ) 

        ) 

      ) 

    ) 

) 

我想要做的就是數組的鍵與鍵children 0,1,2,3復位,等等,而不是45,56,57或

我想是這樣的:

function array_values_recursive($arr) 
{ 
    foreach ($arr as $key => $value) 
    { 
     if(is_array($value)) 
     { 
      $arr[$key] = array_values($value); 
      $this->array_values_recursive($value); 
     } 
    } 

    return $arr; 
} 

但是,這僅重置第一個孩子陣列的密鑰(一個與鍵45)

+2

爲什麼「O爲什麼人們堅持用嵌套多層次合作數組而不是使用OOP? – alfasin 2012-08-13 23:29:44

+0

你傳遞了​​什麼函數,數組或數組[子]? – gcochard 2012-08-13 23:30:41

+0

我將數組傳遞給函數 – user765368 2012-08-13 23:32:21

回答

3

您使用遞歸方法,但不要在任何地方分配函數調用$this->array_values_recursive($value);的返回值。第一級適用,因爲您在循環中修改了$arr。由於上述原因,任何進一步的級別都不起作用。

如果你想讓你的功能,如下改變它(未經):

function array_values_recursive($arr) 
{ 
    foreach ($arr as $key => $value) 
    { 
    if (is_array($value)) 
    { 
     $arr[$key] = $this->array_values_recursive($value); 
    } 
    } 

    if (isset($arr['children'])) 
    { 
    $arr['children'] = array_values($arr['children']); 
    } 

    return $arr; 
} 
+0

遞歸可以工作,但我的數組中的所有鍵都變爲0,1等...(甚至是鍵ID和名稱)。我只希望我的數組中的數字鍵與索引兒童進行更改 – user765368 2012-08-13 23:41:50

+0

我現在只需將您的單詞翻譯成PHP。 – Shi 2012-08-13 23:46:41

+0

是的,這個工程,非常感謝! – user765368 2012-08-13 23:47:59

0

這應做到:

function array_values_recursive($arr, $key) 
{ 
    $arr2 = ($key == 'children') ? array_values($arr) : $arr; 
    foreach ($arr2 as $key => &$value) 
    { 
     if(is_array($value)) 
     { 
      $value = array_values_recursive($value, $key); 
     } 
    } 
    return $arr2; 
} 
+0

這不起作用 – user765368 2012-08-13 23:45:39

1
function array_values_recursive($arr) 
{ 
    $arr2=[]; 
    foreach ($arr as $key => $value) 
    { 
     if(is_array($value)) 
     {    
      $arr2[] = array_values_recursive($value); 
     }else{ 
      $arr2[] = $value; 
     } 
    } 

    return $arr2; 
} 

這個功能實現array_values_recursive從array like:

array( 
    'key1'=> 'value1', 
    'key2'=> array (    
     'key2-1'=>'value-2-1', 
     'key2-2'=>'value-2-2' 
     ) 
); 

到陣列,如:

array(
    0 => 'value1', 
    1 => array (
      0 =>'value-2-1', 
      1 =>'value-2-2' 
     ) 
); 
+0

你應該解釋你的答案 – zoran404 2014-09-02 11:44:17

0

試試這個,

function updateData($updateAry,$result = array()){ 
    foreach($updateAry as $key => $values){ 
     if(is_array($values) && count($values) > 0){ 
     $result[$key] = $this->_updateData($values,$values); 
     }else{ 
     $result[$key] = 'here you can update values'; 
     } 
    } 
    return $result; 
    } 
0

您可以使用PHP的FNC walk_array_recursive Here

+0

請解釋他們將如何使用它來解決他們的問題。 – 2017-12-25 20:46:24