2010-11-04 11 views
5

Soy consciente de que puedo usar array_unique(array_merge($a,$b));

fusionar dos matrices y luego eliminar los duplicados,

pero,

hay una función individual que va a hacer esto por mí?

(Sé que podría escribir una que llame a esto, pero me pregunto).

+0

Saludos chicos, Simplemente tenía curiosidad por saber si había una función php para no tener que llamar a otra función en la matriz (puede ser bastante grande). – Hailwood

+1

Si solo escribe una función de todos modos para no seguir escribiendo 'array_unique (array_merge (...))', tenga en cuenta que 'array_merge()' puede aceptar más de 2 argumentos. Solo un pensamiento :) – BoltClock

Respuesta

6

No hay tal función. Los lenguajes de programación en general le brindan un cierto conjunto de herramientas (funciones) y luego puede combinarlas para obtener los resultados que desea.

Realmente no tiene sentido crear una nueva función para cada caso de uso que exista, a menos que sea un caso de uso muy común, y el suyo no parece ser uno.

+0

aceptará en 5 minutos. – Hailwood

+0

Hay muchas funciones de matriz, otra no cuenta ... Pensar en "arreglos" como "conjuntos" y "fusionar" como "unión", bueno, eso es común. – Vili

+0

PHP es precisamente uno de los lenguajes que tiene muchos métodos auxiliares que no son completamente necesarios pero que aún son realmente útiles. Más que cualquier otro idioma que conozco. – OMA

0

Por defecto no, no. Puede hacerlo de otra manera (que podría no ser tan inteligente)

$array1 = array('abc', 'def'); 
$array2 = array('zxd', 'asdf'); 

$newarray = array_unique(array($array1, $array2)); 

hace el mismo tipo de cosas. Me pregunto por qué no es lo que publicaste lo suficientemente bueno?

+0

'array (array (/ * algunos datos * /), array (/ * algunos otros datos * /))' no es lo mismo que 'array_merge()' en absoluto: 'array merge()' combina todos los valores de las matrices en una matriz; 'array()' simplemente combina las matrices en sí mismas como valores en una matriz. Por proxy, 'array_unique' no hará lo que el OP intenta lograr. – pinkgothic

+0

@pinkgothic, ¿cuál es tu punto? –

+0

Solo que su respuesta no es lo que el OP está tratando de lograr (y tampoco hace 'más o menos lo mismo'), por lo tanto no es una respuesta a su problema. Hacer matrices multidimensionales con 'array()' puede ser perspicaz para alguien en general (<- soy serio), pero no en el alcance de esta pregunta. Al ver que este lugar es un poco como una enciclopedia de Q & A, vale la pena señalar que su respuesta no encaja. – pinkgothic

0
//usage $arr1=array(0=>"value0", 1=>"value1", 2=>"value2"); $arr2=array(0=>"value3", 1=>"value4", 2=>"value0") => $result=mergeArrays($arr1,$arr2); $result=Array ([0] => value0 [1] => value1 [2] => value2 [3] => value3 [4] => value4) 

function mergeArrays() { 
    $result=array(); 
    $params=func_get_args(); 
    if ($params) foreach ($params as $param) { 
     foreach ($param as $v) $result[]=$v; 
    } 
    $result=array_unique($result); 
    return $result; 
} 
0

en PHP 5.6+ también se puede utilizar el nuevo argumento de desembalaje para evitar múltiples llamadas array_merge (que acelerar significativamente su código): https://3v4l.org/arFvf

<?php 

$array = [ 
    [1 => 'french', 2 => 'dutch'], 
    [1 => 'french', 3 => 'english'], 
    [1 => 'dutch'], 
    [4 => 'swedish'], 
]; 

var_dump(array_unique(array_merge(...$array))); 

Salidas:

array(4) { 
    [0]=> 
    string(6) "french" 
    [1]=> 
    string(5) "dutch" 
    [3]=> 
    string(7) "english" 
    [5]=> 
    string(7) "swedish" 
} 
Cuestiones relacionadas