Tengo 2 matrices multidimensionales en php, y estoy tratando de obtener solo las subarreglas que tienen un valor de columna coincidente.
1ra matriz:
0 => {#1 ▼ +"name": "John Doe" +"education": "Finance" +"age": "23" +"mark": "10" } 1 => {#2 ▼ +"name": "Jane Doe" +"education": "History" +"age": "25" +"mark": "9" } 2 => {#3 ▼ +"name": "Anne Smith" +"education": "Computer Science" +"age": "22" +"mark": "8" }2do arreglo:
0 => {#1 ▼ +"name": "Bob Builder" +"country": "US" +"city": "Massachusetts" } 1 => {#2 ▼ +"name": "Jane Doe" +"country": "France" +"city": "Paris" } 2 => {#3 ▼ +"name": "Anne Smith" +"country": "Germany" +"city": "Berlin" } Quiero hacer coincidir el name de la columna.
La salida deseada debe ser la siguiente:
0 => {#2 ▼ +"name": "Jane Doe" +"country": "France" +"city": "Paris" +"education": "History" +"age": "25" +"mark": "9" } 1 => {#3 ▼ +"name": "Anne Smith" +"country": "Germany" +"city": "Berlin" +"education": "Computer Science" +"age": "22" +"mark": "8" }Cualquier ayuda en esto sería apreciada.
Aquí hay una forma de hacerlo.
Primero, vuelva a indexar la primera matriz por nombre. Esto simplificará la coincidencia de nombres en la siguiente parte.
$first = array_column($first, null, 'name');Luego iterar la segunda matriz. Si la persona existe en la primera matriz, combine los valores de las dos matrices y agréguelos al producto. Si no, no hagas nada, ya que solo estás buscando la intersección.
foreach ($second as $person) { if (isset($first[$person['name']])) { $product[] = array_merge($first[$person['name']], $person); } }Un problema potencial con esto es que los nombres no son únicos, y esto se romperá si alguna vez tienes personas con el mismo nombre. Sería mucho mejor si tuviera algún identificador único para usar para una persona en lugar de un nombre.