note 47906 deleted from function.array-udiff by aidan
| From: | aidan@php.net | Date: | Sun, 05 Dec 2004 15:43:39 +0000 |
| Subject: | note 47906 deleted from function.array-udiff by aidan | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-81408@lists.php.net to get a copy of this message | ||
Note Submitter: farad at farad dot com dot au
----
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");
}
?>
----
Reason: useless example