【问题标题】:How to merge multiple Associative Arrays into one?如何将多个关联数组合并为一个?
【发布时间】:2018-04-18 08:11:42
【问题描述】:

如何将这个关联数组合并到一个具有数组(标题,描述)的数组中? GetContent 函数排序的数据符合我的要求。

  function getContent($data) {
        $tabs = $data->result->data->tab;    
        $type = findByType($tabs,'content');
            $content = array(); 
            foreach ($type->unified_content->item as $item) { 
                if($item->type->name == 'header') {
                    $content[] = array(
                        'title' => $item->text
                    );   
                } else {
                    $content[] = array(
                        'description' => $item->text
                    );
                }   
            }
            return $content;           
    }

foreach 结果的vardump,我如何合并标题+描述:

array(1) {
  ["title"]=>
  string(13) "Test článku"
}
array(1) {
  ["description"]=>
  string(20) "Nový článek test."
}
array(1) {
  ["title"]=>
  string(15) "Test článku 2"
}
array(1) {
  ["description"]=>
  string(22) "Nový článek test 2."
}
array(1) {
  ["title"]=>
  string(15) "Test článku 3"
}
array(1) {
  ["description"]=>
  string(22) "Nový článek test 3."
}

【问题讨论】:

标签: php arrays json merge associative


【解决方案1】:

如果您的内容有严格的顺序,您可以像这样使用临时数组来存储titledescription

foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') {
        $arr = [];
        $arr['title'] = $item->text;
    } else {
        $arr['description'] = $item->text;
        $content[] = $arr;
    }   
}

如果没有,则需要合并数组。

【讨论】:

  • 非常感谢 :))
【解决方案2】:

您可以使用 array_merge

比如

foreach ($type->unified_content->item as $item) { 
                if($item->type->name == 'header') {
                    $content = array_merge($content,array(
                        'title' => $item->text
                    ));   
                } else {
                    $content = array_merge($content,array(
                        'description' => $item->text
                    ));
                }   
            }

【讨论】:

  • 不好,因为结果只有最后一个数组:string(15) "Test článku 3" string(22) "Nový článek test 3."
【解决方案3】:

您可以将 titledescription 存储在一个数组中,然后将其传递给您的 $content 数组。

替换这个:

foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') {
        $content[] = array(
            'title' => $item->text
        );   
    } else {
        $content[] = array(
            'description' => $item->text
        );
    }   
}

有了这个:

 $i = 0;
 $content_temp = array();
 foreach ($type->unified_content->item as $item) { 
    if($item->type->name == 'header') {
        $content_temp['title'] = $item->text;   
    } else {
        $content_temp['description'] = $item->text
    }   
    $i++;
    if($i % 2 == 0){
       $content[] = $content_temp;
    }
}

完整代码:

function getContent($data) {
    $tabs = $data->result->data->tab;    
    $type = findByType($tabs,'content');
    $content = array(); 
    $i = 0;
    $content_temp = array();
    foreach ($type->unified_content->item as $item) { 
        if($item->type->name == 'header') {
            $content_temp['title'] = $item->text;   
        } else {
            $content_temp['description'] = $item->text
        }   
        $i++;
        if($i % 2 == 0){
           $content[] = $content_temp;
        }
    }
    return $content;           
}

【讨论】:

    【解决方案4】:

    array_merge() 效率更高,但有几个选项:

    $array1 = array("id1" => "value1");
    
    $array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");
    
    $array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
    $array4 = $array1 + $array2;
    
    echo '<pre>';
    var_dump($array3);
    var_dump($array4);
    echo '</pre>';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2016-09-28
      • 2012-10-21
      • 2013-06-19
      • 2012-11-01
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多