7

私がこのような配列を持っているとしましょう:

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を45、56、57ではなく0、1、2、3などにリセットすることです。

私は次のようなことを試しました:

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を持つもの)のみをリセットします

4

5 に答える 5

4
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(   
   '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'
          )
);
于 2014-09-02T11:34:36.033 に答える
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;
}
于 2012-08-13T23:35:14.703 に答える
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;
}
于 2012-08-13T23:42:03.593 に答える
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;
   }
于 2017-04-14T06:41:38.037 に答える
-1

ここでphpfncwalk_array_recursiveを使用できます

于 2017-12-25T20:24:20.700 に答える