Eliminar elementos de una matriz si se encuentra en otra [duplicate]

2 minutos de lectura

avatar de usuario
Torre

Posible duplicado:

Eliminar el elemento de la matriz si existe en una matriz de ‘palabras no permitidas’

Tengo una cadena dinámica que los clientes enviarán y quiero crear etiquetas delimitadas por comas a partir de ella:

$subject = "Warmly little in before cousin as sussex and an entire set Blessing it ladyship.";
print_r($tags = explode(" ", strtolower($subject)));

Y, sin embargo, quiero eliminar un grupo específico de palabras (como artículos definidos), pero quiero eliminar la clave y el valor de esa palabra si está en la matriz ampliada:

$definite_articles = array('the','this','then','there','from','for','to','as','and','or','is','was','be','can','could','would','isn\'t','wasn\'t', 'until','should','give','has','have','are','some','it','in','if','so','of','on','at','an','who','what','when','where','why','we','been','maybe','further');

Si una de estas palabras en el $definite_article matriz están en el $tags matriz elimine la clave y el valor de esa palabra y la nueva matriz tendrá estas palabras eliminadas. Haré que esta matriz sea utilizada por array_rand tener un grupo aleatorio de palabras elegidas de él. He intentado muchas cosas para lograr mi resultado, pero nada hasta ahora. ¿Alguien puede ayudarme a encontrar una solución a esto?

Estás buscando array_diff:

$subject = "Warmly little in before cousin as sussex...";
$tags = explode(" ", strtolower($subject));

$definite_articles = array('the','this','then','there','from','for','to','as');

$tags = array_diff($tags, $definite_articles);
print_r($tags);

Véalo en acción.

Suena como un trabajo fácil para array_diff().

array array_diff ( array $array1 , array $array2 [, array $... ] )

compara array1 contra array2 y devuelve la diferencia.

Lo que básicamente significa que volverá array1 después de haber sido despojado de todos los valores que existen en array2.

  • array_diff() conservará las claves de matriz originales [of array1], que es lo que hace que esta afirmación sea verdadera. Puede o no querer esto, pero es algo a tener en cuenta.

    – Jasón

    31 de mayo de 2015 a las 9:55


  • array_diff() conservará las claves de matriz originales [of array1] – simplemente envuélvalo en array_values ​​- esto restablecerá nuevas claves de matriz: Ejemplo: $new_array=array_values(array_diff($array1, $array2));

    – realmag777

    4 de enero de 2018 a las 15:57


¿Ha sido útil esta solución?