首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP深度扩展数组

PHP深度扩展数组
EN

Stack Overflow用户
提问于 2012-10-04 18:17:48
回答 5查看 7.2K关注 0票数 21

如何对多维关联数组进行深度扩展(用于已解码的JSON对象)。我需要的PHP等价物的jQuery's $.extend(true, array1, array2)与数组,而不是JSON和php。

下面是我需要的一个例子(array_merge_recursive似乎没有做同样的事情)

代码语言:javascript
复制
$array1 = ('1'=> ('a'=>'array1a', 'b'=>'array1b'));
$array2 = ('1'=> ('a'=>'array2a', 'c'=>'array2b'));

$array3 = array_extend($array1, $array2);

//$array3 = ('1'=> ('a'=>'array2a', 'b'=>'array1b', 'c'=>'array2b'))

注意如果array1具有相同的值,array2如何覆盖它(就像类的扩展是如何工作的)

EN

回答 5

Stack Overflow用户

发布于 2013-04-02 16:55:35

这可能就是你要找的:

代码语言:javascript
复制
function array_extend(&$result) {
  if (!is_array($result)) {
    $result = array();
  }

  $args = func_get_args();

  for ($i = 1; $i < count($args); $i++) {
    // we only work on array parameters:
    if (!is_array($args[$i])) continue;

    // extend current result:
    foreach ($args[$i] as $k => $v) {
      if (!isset($result[$k])) {
        $result[$k] = $v;
      }
      else {
        if (is_array($result[$k]) && is_array($v)) {
          array_extend($result[$k], $v);
        }
        else {
          $result[$k] = $v;
        }
      }
    }
  }

  return $result;
}

用法:

代码语言:javascript
复制
$arr1 = array('a' => 1, 'b' => 2, 'c' => 3);
$arr2 = array('b' => 'b', 'd' => 'd');
array_extend($arr1, $arr2);
print_r($arr1); // array('a' => 1, 'b' => 'b', 'c' => 3, 'd' => 'd')

// or, to create a new array and leave $arr1 unchanged use:
array_extend($arr3, $arr1, $arr2);
print_r($arr3); // array('a' => 1, 'b' => 'b', 'c' => 3, 'd' => 'd')

// or, use the return value:
print_r(array_extend($arr1, $arr2)); // but this will also modify $arr1
票数 2
EN

Stack Overflow用户

发布于 2013-08-05 00:42:21

我使用它的方式与使用angular.extend(dst,src)和jQuery.extend()的方式相同。

代码语言:javascript
复制
function extend($base = array(), $replacements = array()) {
    $base = ! is_array($base) ? array() : $base;
    $replacements = ! is_array($replacements) ? array() : $replacements;

    return array_replace_recursive($base, $replacements);
}

示例:

si()是一个实用的清理函数,它获取$_POST或$_GET并返回一个数组。

代码语言:javascript
复制
        $s = extend(array(
            'page' => 1,
            'take' => 100,
            'completed' => 1,
            'incomplete' => 1,
        ), si());
票数 2
EN

Stack Overflow用户

发布于 2012-10-04 18:17:48

摘自array_merge文档:

代码语言:javascript
复制
function array_extend($a, $b) {
    foreach($b as $k=>$v) {
        if( is_array($v) ) {
            if( !isset($a[$k]) ) {
                $a[$k] = $v;
            } else {
                $a[$k] = array_extend($a[$k], $v);
            }
        } else {
            $a[$k] = $v;
        }
    }
    return $a;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12725113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档