加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

将平面PHP数组转换为基于数组键的嵌套数组?

发布时间:2020-12-13 16:30:08 所属栏目:PHP教程 来源:网络整理
导读:我需要转换一个平面数组,其中数组键将结构指示为一个嵌套数组,其中父元素变为零,即在示例中: $education['x[1]'] = 'Georgia Tech'; 它需要转换为: $education[1][0] = 'Georgia Tech'; 这是一个输入数组的例子: $education = array( 'x[1]' = 'Georgia T
我需要转换一个平面数组,其中数组键将结构指示为一个嵌套数组,其中父元素变为零,即在示例中:
$education['x[1]'] = 'Georgia Tech';

它需要转换为:

$education[1][0] = 'Georgia Tech';

这是一个输入数组的例子:

$education = array(
  'x[1]'     => 'Georgia Tech','x[1][1]'  => 'Mechanical Engineering','x[1][2]'  => 'Computer Science','x[2]'     => 'Agnes Scott','x[2][1]'  => 'Religious History','x[2][2]'  => 'Women's Studies','x[3]'     => 'Georgia State','x[3][1]'  => 'Business Administration',);

这里是什么输出应该是:

$education => array(
  1 => array(
    0 => 'Georgia Tech',1 => array( 0 => 'Mechanical Engineering' ),2 => array( 0 => 'Computer Science' ),),2 => array(
    0 => 'Agnes Scott',1 => array( 0 => 'Religious History' ),2 => array( 0 => 'Women's Studies' ),3 => array(
    0 => 'Georgia State',1 => array( 0 => 'Business Administration' ),);

我的头撞在墙上几个小时,仍然无法使其工作.我想我一直在看它太久了.提前致谢.

附:它应该是完全可嵌套的,即它应该能够转换一个如下所示的键:

x[1][2][3][4][5][6]

P.P.S. @Joseph Silber有一个聪明的解决方案,但不幸的是,使用eval()不是一个选项,因为它是一个WordPress插件,WordPress社区正在试图消除eval()的使用.

这里有一些代码来处理你最初提出的输出.
/**
 * Give it and array,and an array of parents,it will decent into the
 * nested arrays and set the value.
 */
function set_nested_value(array &$arr,array $ancestors,$value) {
  $current = &$arr;
  foreach ($ancestors as $key) {

    // To handle the original input,if an item is not an array,// replace it with an array with the value as the first item.
    if (!is_array($current)) {
      $current = array( $current);
    }

    if (!array_key_exists($key,$current)) {
      $current[$key] = array();
    }
    $current = &$current[$key];
  }

  $current = $value;
}


$education = array(
  'x[1]'     => 'Georgia Tech',);

$neweducation = array();

foreach ($education as $path => $value) {
  $ancestors = explode('][',substr($path,2,-1));
  set_nested_value($neweducation,$ancestors,$value);
}

基本上,将数组键分解成一个很好的祖先键,然后使用一个很好的函数,使用这些父对象进入$neweducation数组,并设置该值.

如果您想要更新您的帖子的输出,请在“explode”行之后的foreach循环中添加.

$ancestors[] = 0;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读