note 31364 modified in function.array-diff by vrana

From: Date: Tue, 17 Aug 2004 13:57:28 +0000
Subject: note 31364 modified in function.array-diff by vrana
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-80087@lists.php.net to get a copy of this message
What I was needing was a way to diff multidimension arrays by a given key.... I came up with this. <?php /* * Multidimension array subtract by a sub key. * * $array1 = array( * array( * "name" => "Foo", * "mail" => "foo@moo.net" * ), * array( * "name" => "Bar", * "mail" => "bar@bie.com" * ) * ); * * $array2 = array( * array( * "name" => "Foo", * "mail" => "foo@moo.net" * ), * array( * "name" => "Xpto", * "mail" => "xpto@xp.to" * ) * ); * * $result = array_subtract($array1, $array2, "name"); * * $result = array( * array( * "name" => "Bar", * "mail" => "bar@bie.com" * ) * ); * * Authors: * Antonio Fernandes <ampf@egp.up.pt> * */ function array_subtract($array1,$array2,$compareString) { if (!is_array($array1) || !is_array($array2) || !$compareString) { return false; } $arrResult = array(); foreach ($array1 as $arrInsideArray1) { foreach ($array2 as $arrInsideArray2) { $found=false; if ($arrInsideArray1[$compareString]==$arrInsideArray2[$compareString]) { $found=true; break; } } if (!$found) { array_push($arrResult,$arrInsideArray1); } } return $arrResult; } ?> --was-- What I was needing was a way to diff multidimension arrays by a given key.... I came up with this. /* * Multidimension array subtract by a sub key. * * $array1 = array( * array( * "name" => "Foo", * "mail" => "foo@moo.net" * ), * array( * "name" => "Bar", * "mail" => "bar@bie.com" * ) * ); * * $array2 = array( * array( * "name" => "Foo", * "mail" => "foo@moo.net" * ), * array( * "name" => "Xpto", * "mail" => "xpto@xp.to" * ) * ); * * $result = array_subtract($array1, $array2, "name"); * * $result = array( * array( * "name" => "Bar", * "mail" => "bar@bie.com" * ) * ); * * Authors: * Antonio Fernandes <ampf@egp.up.pt> * */ function array_subtract($array1,$array2,$compareString) { if (!is_array($array1) || !is_array($array2) || !$compareString) { return false; } $arrResult = array(); foreach ($array1 as $arrInsideArray1) { foreach ($array2 as $arrInsideArray2) { $found=false; if ($arrInsideArray1[$compareString]==$arrInsideArray2[$compareString]) { $found=true; break; } } if (!$found) { array_push($arrResult,$arrInsideArray1); } } return $arrResult; } http://php.net/manual/en/function.array-diff.php

« previous php.notes (#80087) next »