【问题标题】:PHP: Set value of nested array using variable as keyPHP:使用变量作为键设置嵌套数组的值
【发布时间】:2015-07-11 13:14:20
【问题描述】:

假设我有这种代码:

    $array = [
        'a'=> [
            'b' => [
                'c'=>'some value',
            ],
        ],
    ];

    $array['a']['b']['c'] = 'new value';

当然这是可行的,但我想要的是使用变量来更新这个“c”键,就像这样:

$keys = '[a][b][c]';
$array{$keys} = 'new value';

但是键被视为字符串,这就是我得到的:

$array['[a][b][c]'] = 'new value';

所以我需要一些帮助,向我展示在不使用 eval() 的情况下完成这项工作的正确方法。

顺便说一句,可以有任意数量的数组嵌套,所以这样的答案不是很好:

$key1 = 'a';
$key2 = 'b';
$key3 = 'c';
$array[$key1][$key2][$key3] = 'new value';

【问题讨论】:

    标签: php arrays multidimensional-array nested


    【解决方案1】:

    这不是定义密钥的最佳方式,但是:

    $array = [];
    $keys = '[a][b][c]';
    $value = 'HELLO WORLD';
    
    $keys = explode('][', trim($keys, '[]'));
    $reference = &$array;
    foreach ($keys as $key) {
        if (!array_key_exists($key, $reference)) {
            $reference[$key] = [];
        }
        $reference = &$reference[$key];
    }
    $reference = $value;
    unset($reference);
    
    var_dump($array);
    

    如果你必须在这样的字符串中定义一个键序列,那么使用一个可以分解的简单分隔符就更简单了,而不是需要修剪来构建一个单独的键数组,所以更简单的东西就像a.b.c[a][b][c] 更容易使用

    Demo

    【讨论】:

    • 谢谢,这正是我所需要的。是的,iam 使用 join() 定义了字符串的键,例如 a.b.c,如果有人需要,请编写代码:function keyArray($array = [], array $path = []) { $result = array(); foreach ($array as $key => $val) { $currentPath = array_merge($path, array($key)); if (is_array($val)) { $result = array_merge($result, keyArray($val, $currentPath)); } else { $result[] = join('.', $currentPath); } } 返回 $result; }
    【解决方案2】:

    最简单的方法是使用来自this libraryset 方法:

    Arr::set($array, 'a.b.c', 'new_value');
    

    或者,如果你有键作为数组,你可以使用这种形式:

    Arr::set($array, ['a', 'b', 'c'], 'new_value');
    

    【讨论】:

      【解决方案3】:

      嗨,兄弟,您可以通过一组键来做到这一点:

      这是你的数组结构:

      $array = array(
          'a'=> array(
              'b' => array(
                  'c'=>'some value',
              ),
          ),
      );
      

      这是使用动态键从数组中获取值的 PHP 代码:

      $result = $array; //Init an result array by the content of $array
      
      $keys = array('a','b','c'); //Make an array of keys
      
      //For loop to get result by keys
      for($i=0;$i<count($keys);$i++){
          $result = $result[$keys[$i]];
      }
      
      echo $result; // $result = 'new value'
      

      希望答案对你有所帮助,在这里找到你工作代码的PHPFiddle

      【讨论】:

      • 你太棒了!我正在寻找检索内部数组的方法!
      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 2019-02-22
      • 2017-04-02
      • 1970-01-01
      • 2021-01-24
      • 2011-12-30
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多