PHP Deep Extend Array

后端 未结 7 1416
遇见更好的自我
遇见更好的自我 2020-12-31 01:53

How can I do a deep extension of a multi dimensional associative array (for use with decoded JSON objects). I need the php equivalent of jQuery\'s $.extend(true, array1, arr

相关标签:
7条回答
  • 2020-12-31 02:18

    This might be what you're looking for:

    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;
    }
    

    Usage:

    $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
    
    0 讨论(0)
提交回复
热议问题