A continuación se muestra la variable que tengo,
$string = 'AAA,BBB,aAA,BbB,AAA,BbB';
Necesito el resultado de la cadena única a continuación,
$string = 'AAA,BBB,aAA,BbB';
¿Cómo hacerlo único al igual que la función array_unique()
, ¿hay alguna función de cadena predeterminada para eliminar la cadena duplicada en PHP?
No sé si php tiene esa función, pero puedes procesarlo así: demostración en vivo
$raw = 'AAA,BBB,aAA,BbB,AAA,BbB'; $string = implode(',', array_unique(explode(',', $raw)));
Para que conste, apoyo completamente el método de Kris, y esa es la forma que elegiría si fuera para mi proyecto. Sin embargo, me gustaría agregar que hay varias formas adicionales de despellejar a este gato:
Código: ( Demostración )
$raw = 'AAA,BBB,aAA,BbB,BbB,AAA'; // str_word_count() -> array_unique() -> implode() echo implode(',',array_unique(str_word_count($raw,1))); echo "\n"; // str_getcsv() -> array_unique() -> implode() echo implode(',',array_unique(str_getcsv($raw))); echo "\n"; // preg_match_all() -> array_unique() -> join() echo join(',',array_unique(preg_match_all("/[A-Za-z]{3}/",$raw,$m)?$m[0]:array())); echo "\n"; // preg_split() -> array_unique() -> join() echo join(',',array_unique(preg_split("/,/",$raw))); echo "\n"; // preg_replace() -> parse_str() -> implode() parse_str(preg_replace('/(^|,)([A-Za-z]{3})/',"$2=$2&",$raw),$array); echo implode(',',$array);
Tengo 5 métodos diferentes para explotar la cadena csv sin usar explode()
.
1 método que no usa array_unique.
Y, por supuesto, implode()
y join()
se pueden usar indistintamente ya que son sinónimos.
Creo que el quinto método es mi favorito, ya que es el más loco y no usa array_unique()
. *lamentablemente es una frase de dos líneas :{
PD
@Thiyagu dice que así es como se construye la cadena:
forloop(){ $string .= $a[i].',';}
Si eso es cierto, se pueden eliminar los duplicados dentro de este ciclo aprovechando una matriz temporal. Esto tiene el beneficio adicional de omitir la coma final que genera la concatenación.
foreach($data as $value){ $result[$value]=$value; // duplicate values will be overwritten because arrays may not have two identical keys } echo implode(',',$result);