Tratar con: $string = 'one,two,one,five,seven,bag,tea';
Si va a generar la cadena en cualquier punto "a la escritura", entonces debería ser la eliminación de duplicados a medida que ocurren.
Digamos que usted está utilizando concatenación para generar su cadena como:
$string='';
foreach($data as $value){
$string.=(strlen($string)?',':'').some_func($value);
}
... entonces deberá extraer valores únicos de $string
basado en el delimitador (coma), a continuación, volver a implosionar con el delimitador.
Sugiero que el diseño de un método más directo y negar duplicados dentro del bucle foreach inicial, así:
foreach($data as $value){
$return_value=some_func($value); // cache the returned value so you don't call the function twice
$array[$return_value]=$return_value; // store the return value in a temporary array using the function's return value as both the key and value in the array.
}
$string=implode(',',$array); // clean: no duplicates, no trailing commas
Esto funciona porque los valores duplicados no se les permite existir. Todas las ocurrencias subsecuentes se usarán para sobrescribir la ocurrencia anterior. Este filtro sin función funciona porque las matrices pueden no tener dos claves idénticas en la misma matriz (nivel).
Como alternativa, puede evitar "sobreescribir" datos de matriz en el ciclo, llamando al if(!isset($array[$return_value])){$array[$return_value]=$return_value;}
, pero la diferencia significa llamar a la función isset()
en cada iteración. La ventaja de utilizar estas asignaciones de clave asociativas es que el proceso evita el uso de in_array()
que es más lento que isset()
.
Dicho todo esto, si usted está extrayendo una columna de datos de una matriz de 2 dimensiones como:
$string='';
foreach($data as $value){
$string.=(strlen($string)?',':'').$value['word'];
}
entonces se podría aprovechar la magia de array_column()
sin un bucle like this:
echo implode(',',array_column($str,'word','word'));
Y, por último, para aquellos interesados en la micro-optimización, señalaré que la única llamada de array_unique()
es en realidad más lenta que af ew métodos de dos funciones. Read here para más detalles.
La conclusión es que hay muchas maneras de realizar esta tarea.explode->unique->implode
puede ser el método más conciso en algunos casos si no está generando la cadena delimitada, pero no es probable que sea el método más directo o más rápido. Elige por ti mismo lo que es mejor para tu tarea.
¿Cuál es el tamaño estimado de estos datos? –