note 47906 added to function.array-udiff
| From: | farad at farad dot com dot au | 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