如何在没有重复的数组中合并多个数组

时间:2015-10-15 12:02:53

标签: php arrays

我是这方面的新手,在开始这个主题之前,我已经阅读了很多关于这个问题的内容(包括这里的一些主题),但是我还没有完成,所以我会请求一些帮助(如果有的话)是可能的):))

因此,在我要打印的列中,我在每一行都有这样的值:

值1 |值2 |值5 | value12 | value25

值3 |值5 | value12 | value14 | value26 | VALUE32 | value55

值1 |值2 | value14 | value26 | value31

行数可以是3或1500 + ...所以我想合并数组并打印那些已排序且没有重复的值:value1,value2,value3,value5,value12等...

我试图爆炸数组,但我无法找到如何为每个数组分配变量并合并它们,我所做的就是打印所有值:

foreach ($rows as $areas) {
    foreach (explode('|', $areas->value) as $area) {
        var_dump($area);
    }
}

之后我读过某个地方,如果我有很多行(而且我会有成千上万的话)会很慢,所以我被困在这里,我不知道还能做些什么......

我会感谢你能给我的任何帮助和方向,因为这对我来说太难了,没有帮助我就无法做到这一点

提前谢谢

2 个答案:

答案 0 :(得分:0)

您可以将展开的字符串的每个值存储为键(如果它不是对象也不是数组),它只存储唯一值。然后你必须使用array_keys()获取密钥并对返回的数组进行排序:

$rows = array(
    'value1|value2|value5|value12|value25',
    'value3|value5|value12|value14|value26|value32|value55',
    'value1|value2|value14|value26|value31'
);

$results = array();
foreach ($rows as $row) {
    $items = explode('|', $row);
    foreach ($items as $item) {
        $results[$item] = 0;
    }
}
$results = array_keys($results);
sort($results, SORT_NATURAL);

Live demo on eval.in

答案 1 :(得分:0)

有两种方法可以做到这一点:

<?php

$str = 'value1|value2|value5|value12|value25';
$str1 = 'value3|value5|value12|value14|value26|value32|value55';
$str2 = 'value1|value2|value14|value26|value31';


//-- Method 1: Concat and make a single string and then explode and make a single array
$finalString = $str . '|' . $str1 . '|' . $str2;
print_r(array_unique(explode('|', $finalString)));

//-- Method 2: explode first and then merge into a single array
$strArr = explode('|', $str);
$strArr1 = explode('|', $str1);
$strArr2 = explode('|', $str2);
print_r(array_unique(array_merge($strArr, $strArr1, $strArr2)));