Php Laravel-从点符号创建数组

Php Laravel-从点符号创建数组,php,laravel,Php,Laravel,我不能把它做好。如果我有这样的数组表示法: ['email', 'privacy.language', 'privacy.phonenr', 'privacy.user.id'] [ 0 => 'email', 'privacy' => [ 0 => 'language', 1 => 'phonenr', 'user' => [ 0 => 'id' ] ], ] protected f

我不能把它做好。如果我有这样的数组表示法:

['email', 'privacy.language', 'privacy.phonenr', 'privacy.user.id']
[
 0 => 'email',
 'privacy' => [
      0 => 'language',
      1 => 'phonenr',
      'user' => [
         0 => 'id'
      ]
 ],
]
protected function undotArray(array $fields) 
{
    $array = [];

    foreach ($fields as $key => $field) {

        $keys = explode('.', $field);

        if(count($keys) == 1){
            $array[] = $keys[0];
            continue;
        }

        if(count($keys) == 2){
            $array[$keys[0]][] = $keys[1];
            continue;
        }

        if(count($keys) == 3){
            $array[$keys[0]][$keys[1]][] = $keys[2];
        }

    }


    return $array;

}
我想得到一个如下所示的数组:

['email', 'privacy.language', 'privacy.phonenr', 'privacy.user.id']
[
 0 => 'email',
 'privacy' => [
      0 => 'language',
      1 => 'phonenr',
      'user' => [
         0 => 'id'
      ]
 ],
]
protected function undotArray(array $fields) 
{
    $array = [];

    foreach ($fields as $key => $field) {

        $keys = explode('.', $field);

        if(count($keys) == 1){
            $array[] = $keys[0];
            continue;
        }

        if(count($keys) == 2){
            $array[$keys[0]][] = $keys[1];
            continue;
        }

        if(count($keys) == 3){
            $array[$keys[0]][$keys[1]][] = $keys[2];
        }

    }


    return $array;

}
我目前的做法如下:

['email', 'privacy.language', 'privacy.phonenr', 'privacy.user.id']
[
 0 => 'email',
 'privacy' => [
      0 => 'language',
      1 => 'phonenr',
      'user' => [
         0 => 'id'
      ]
 ],
]
protected function undotArray(array $fields) 
{
    $array = [];

    foreach ($fields as $key => $field) {

        $keys = explode('.', $field);

        if(count($keys) == 1){
            $array[] = $keys[0];
            continue;
        }

        if(count($keys) == 2){
            $array[$keys[0]][] = $keys[1];
            continue;
        }

        if(count($keys) == 3){
            $array[$keys[0]][$keys[1]][] = $keys[2];
        }

    }


    return $array;

}

但正如你所看到的,“如果条件”是相似的,它们会重复,这取决于点的数量。我觉得我需要在这里使用递归函数,但我不知道如何使用

你想要的可能不正确。为什么?因为在laravel中,点表示法仅用于键,所以要使用
data\u set
设置这些键,并使用
data\u get
获取。您试图做的是在最后一次使用值切换键moment@VladyslavStartsev很难解释为什么我需要这个,但我正在尝试向LaravelAPI资源添加一个函数。例如,当您说
user=>newuserresource()
时,我想添加通常隐藏的额外字段。所以我这样称呼它:
user=>(newuserresource())->makeVisible(['email','privacy.phonenr'])
。这样,我通过电子邮件获得结果用户,当关系隐私被加载时,我获得phonenr。我希望你能理解这一点。它非常有用:)