php - 拆分字符串形成多维数组键?

标签 php arrays

我正在从 PHP 数组创建 JSON 编码数据,这些数据可能有两层或三层深,看起来像这样:

[grandParent] => Array (
                       [parent] => Array (
                                         [child] => myValue 
                                      )
                    )

我的方法只是在代码中手动创建嵌套数组,这要求我通过键入一些可怕的嵌套数组来使用我的“setOption”函数(稍后处理编码):

$option = setOption("grandParent",array("parent"=>array("child"=>"myValue")));

在这个例子中,我希望能够通过使用与 javascript 类似的符号来获得相同的结果,因为我将在许多页面中设置许多选项,而上面的可读性不是很好,尤其是当嵌套数组包含多个键 - 而能够这样做会更有意义:

$option = setOption("grandParent.parent.child","myValue");

任何人都可以提出一种方法来通过在“.”上拆分字符串来创建多维数组吗?以便我可以将其 json_encode() 转换为嵌套对象?

(setOption 函数的目的是将所有选项收集到一个大的、嵌套的 PHP 数组中,然后再对它们进行编码,这就是解决方案所在的位置)

编辑:我意识到我可以在代码中这样做:

$options['grandparent']['parent']['child'] = "myValue1";
$options['grandparent']['parent']['child2'] = "myValue2";
$options['grandparent']['parent']['child3'] = "myValue3";

哪个可能更简单;但一个建议仍然会动摇(因为我将它用作更广泛对象的一部分,所以它的 $obj->setOption(key,value);

最佳答案

这应该为您填充子数组(如果它们尚未创建)并相应地设置键( codepad here ):

function set_opt(&$array_ptr, $key, $value) {

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

  // extract the last key
  $last_key = array_pop($keys);

  // walk/build the array to the specified key
  while ($arr_key = array_shift($keys)) {
    if (!array_key_exists($arr_key, $array_ptr)) {
      $array_ptr[$arr_key] = array();
    }
    $array_ptr = &$array_ptr[$arr_key];
  }

  // set the final key
  $array_ptr[$last_key] = $value;
}

这样调用它:

$opt_array = array();
$key = 'grandParent.parent.child';

set_opt($opt_array, $key, 'foobar');

print_r($opt_array);

为了与您的编辑保持一致,您可能希望对其进行调整以在您的类中使用数组...但希望这提供了一个起点!

关于php - 拆分字符串形成多维数组键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10519108/

相关文章:

Javascript - 如何按顺序从数组中选取随机元素?

java - 按文件名对文件路径数组进行排序

javascript过滤器缺少数组

php - 在数据库和检索过程中存储图像 URL

javascript - 使用谷歌云消息和服务 worker 的桌面推送通知

php - 获取要写入 SQL 表的 PHP 文件

php foreach echo 打印 "Array"作为值

php - float 框将其他所有内容向下推 - 无限滚动

JAVA从数组转为列表并使用shuffle方法

Javascript 从 2 个数组返回数组,删除重复项