php - 将字符串转换为嵌套数组

标签 php arrays

我想用字符串作为元素键动态设置/获取数组的元素。
所以我正在寻找将字符串转换为多键数组的好方法。
我用那段丑陋的代码达到了预期的结果,但我并不为此感到自豪:

function arrayElementSet($str, $value, array &$array)
{
    $arrayStr = "['".preg_replace('/\./', "']['", $str)."']";
    eval('$array'.$arrayStr.'="'.$value.'";');
}

function arrayElementGet($str, array &$array)
{
    $arrayStr = "['".preg_replace('/\./', "']['", $str)."']";
    eval('$ret=$array'.$arrayStr.';');
    return $ret;
}

$array = array();
arrayElementSet('d0.d1.d2.d4', 'bar', $array);
$wantedElement = arrayElementGet('d0.d1.d2', $array);
print_r($array);
/*
wantedElement looks like:
Array
(
    [d4] => bar
)
$array looks like:
Array
(
    [d0] => Array
        (
            [d1] => Array
                (
                    [d2] => Array
                        (
                            [d4] => bar
                        )
                )
        )
)
*/

但这非常丑陋,而且我想避免使用 eval() 函数。
我并不是特别喜欢数组解决方案,如果有一个带有对象或其他什么的很好的解决方案,我会接受它。


编辑:

只是想知道。 Laravel 的两个开箱即用的辅助函数(array_get 和 array_set):

最佳答案

分割和遍历:

<?php
function arrayElementSet($str, $value, array &$array, $delimiter = '.') {
  $parent =& $array;
  foreach (explode($delimiter, $str) as $key) {
    if (!array_key_exists($key, $parent)) {
      $parent[$key] = array();
    }  

    $parent =& $parent[$key];
  }

  $parent = $value;
}

function arrayElementGet($str, array &$array, $delimiter = '.') {
  $parent =& $array;
  foreach (explode($delimiter, $str) as $key) {
    if (!array_key_exists($key, $parent)) {
      return null;
    }  

    $parent =& $parent[$key];
  }

  return $parent;
}

$array = array();
arrayElementSet('d0.d1.d2.d4', 'bar', $array);
$wantedElement = arrayElementGet('d0.d1.d2', $array);

print_r($array);
print_r($wantedElement);

http://codepad.viper-7.com/maNmOT

关于php - 将字符串转换为嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916792/

相关文章:

php - MySQL 查询不返回值

php - 3个不同的等于

php - 如何在 Ubuntu 16.04 中安装 php-curl

reactjs - 如何在 React.js 中仅显示一次重复的数组值

java - ArrayIndexOutOfBoundsExecption :Android

C++遍历不同类型的数组

php - 找不到消息类 'mongoclient' codeigniter

php - 替换日期末尾的 DAY

arrays - MongoDB 查询 IN 对象数组

php - 将 PHP 数组从 MySQL 编码为 JSON