note 47906 added to function.array-udiff

From: Date: Sun, 05 Dec 2004 04:39:09 +0000
Subject: note 47906 added to function.array-udiff
Groups: php.notes 
Request: Send a blank email to php-notes+get-81374@lists.php.net to get a copy of this message
Here is a simple application of array_udiff in which two unordered arrays (a bag) of two-dimensional floating point cartesian coordinates are compared for equality. This is used to correct student assignment answers. http://www.farad.com.au/source_code/php/array_udiff_test.php <?php require_once 'PHP_Compat-1.3.0/PHP_Compat-1.3.0/Compat/Function/array_udiff.php'; $coord_bag_1 = array(array("x"=>1.2, "y"=>1.3), array("x"=>2.4, "y"=>2.6)); $coord_bag_2 = array(array("x"=>1.2, "y"=>1.3), array("x"=>2.4, "y"=>2.6)); global $g_tolerance; $g_tolerance = 0.00001; function compare_float($in_float_1, $in_float_2) { global $g_tolerance; $delta = (real)($g_tolerance); $middle = (real)($in_float_1); $upper = $middle + $delta; $lower = $middle - $delta; $candidate_value = (real)($in_float_2); if($candidate_value < $lower ) { return -1; } else if( $upper < $candidate_value) { return 1; } else { return 0; } } function compare_coord_2D($in_coord_1, $in_coord_2) { $comparison_x = compare_float($in_coord_1["x"], $in_coord_2["x"]); $comparison_y = compare_float($in_coord_1["y"], $in_coord_2["y"]); if($comparison_x == 0 && $comparison_y == 0) { return 0; } else if($comparison_x == 0) { return $comparison_y; } else if($comparison_y == 0) { return $comparison_x; } else { $product = $comparison_x * $comparison_y; return $product; } return 0; } function are_coord_bags_equal($in_coord_bag_1, $in_coord_bag_2) { if(count($in_coord_bag_1) == count($in_coord_bag_2)) { $diff_array = array_udiff($in_coord_bag_2, $in_coord_bag_1, "compare_coord_2D"); //var_dump($difference_array); return (count($difference_array) == 0); } else { return false; } } $count = 100; for($index = 0; $index < $count; $index++) { shuffle($coord_bag_2); var_dump($coord_bag_2); echo("Equal: " . (are_coord_bags_equal($coord_bag_1, $coord_bag_2) ? "TRUE" : "FALSE")); echo("<BR>\n"); } ?> ---- Manual Page -- http://www.php.net/manual/en/function.array-udiff.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+47906 Delete -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes Reason: bad code -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes&reason=bad+code Reason: spam -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes&reason=spam Reason: useless example -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes&reason=useless+example Reason: contains commercial links -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes&reason=contains+commercial+links Reason: useless note -- http://master.php.net/manage/user-notes.php?action=delete+47906&report=yes&reason=useless+note Reject -- http://master.php.net/manage/user-notes.php?action=reject+47906&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#81374) next »