PHP字符串多维数组 [英] PHP String to multidimensional array

查看:131
本文介绍了PHP字符串多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

比方说,我有我的变量以下字符串:

Let's say I have the following string in my variable:

$arr['data_|_multilanguage_|_en_|_field'] = 23;

我想改变这种成一个多维数组如下:

I want to transform that into a multidimensional array as follows:

$arr['data']['multilanguage']['en']['field'] = 23;

我做了一个递归函数

I did a recursive function

foreach ($arr as $outer_key => $outer_value) {

    $parts = explode('_|_', $outer_key);

    $reference =& $arr;
    $final_key = count($parts) - 1;

    foreach ($parts as $key => $part) {
        if (!$final_key == $key) {

            if (empty($reference[$part])) {
                $reference[$part] = array();
            }

            $reference =& $reference[$part];

        } else {
            $reference[$part] = $arr[$str];
            unset($arr[$outer_key]);
        }
    }
}

问题是,的var_dump 显示,孩子们参考。有没有更好的办法?

The problem is that the var_dump shows that the children are reference. Is there a better way?

推荐答案

您只是有一个错误的如果()语句:

You just have a wrong if() statement :

 if (!$final_key == $key) {}

将被评估的之前 == 。结果
改变它:

! will be evaluated before ==.
Change it for :

 if ($final_key != $key) {}

(你有另一个小问题最终 $参考[$一部分] = 任务,我纠正它在以下code)

(you've got another little issue in your final $reference[$part] = assignment, I corrected it in the following code)

$arr['data_|_multilanguage_|_en_|_field'] = 23;

foreach ($arr as $outer_key => $outer_value) {

    $parts = explode('_|_', $outer_key);

    $reference =& $arr;
    $final_key = count($parts) - 1;

    foreach ($parts as $key => $part) {

        if ($final_key != $key) { 

            if (empty($reference[$part])) {
                $reference[$part] = array();
            }

            $reference =& $reference[$part];

        } else {
            $reference[$part] = $outer_value;
            unset($arr[$outer_key]);
        }
    }
}

和这里是你的结果!

array(1) {
  ["data"]=>
  array(1) {
    ["multilanguage"]=>
    array(1) {
      ["en"]=>
      &array(1) {
        ["field"]=>
        int(23)
      }
    }
  }
}

这篇关于PHP字符串多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆