ID: 29907
Updated by: [EMAIL PROTECTED]
Reported By: benjamin dot lewis at samail dot net
-Status: Closed
+Status: Bogus
Bug Type: Arrays related
Operating System: redhat
PHP Version: 4.3.7
New Comment:
Not a bug in PHP then, marking as Bogus.
Previous Comments:
------------------------------------------------------------------------
[2004-09-02 05:47:03] benjamin dot lewis at samail dot net
the problem is with sorting with usort where the result of sorting
with the length_and_depth function which uses an OR in the condition,
gives strange results conpared with sorting on the two conditions
alone.
------------------------------------------------------------------------
[2004-08-31 08:53:33] [EMAIL PROTECTED]
Try to reduce the code so we can understand the problem without having
to read huge and tangled scripts.
Btw, 4.3.7 is not the current stable version, so you'd better update
it.
------------------------------------------------------------------------
[2004-08-31 08:50:46] benjamin dot lewis at samail dot net
usort
------------------------------------------------------------------------
[2004-08-31 08:48:02] benjamin dot lewis at samail dot net
Description:
------------
cases length and value give the expected results, but when mixed in the
case of length_and_value it gives unexpected results.
Sorry for posting more than 20 lines i don't have an open server to
post it to.
Ben
Reproduce code:
---------------
<?php
$doesntwork = array(
'd1_b_000_000_0_b_000_001_0_b_000_001_0',
'd1_b_000_000_0_b_000_001_0_b_001_001_0',
'd1_b_000_000_0_b_000_001_0_b_000_002_0',
'd1_b_000_000_0_b_000_001_0_b_001_002_0',
'd1_b_000_000_0_b_000_001_0_b_001_003_0',
'd1_b_000_000_0_b_000_001_0_b_000_004_0_b_000_000_0',
'd1_b_000_000_0_b_000_001_0_b_000_004_0_b_000_001_0',
'd1_b_000_000_0_b_000_001_0_b_000_004_0_b_000_002_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_000_001_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_001_0_b_000_000_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_001_0_b_000_001_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_001_0_b_000_002_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_000_002_0' ,
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_002_0_b_000_000_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_002_0_b_000_001_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_002_002_0_b_000_002_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_000_003_0',
'd1_b_000_000_0_b_000_001_0_b_000_005_0_b_000_001_0_b_000_004_0'
);
function value($a, $b)
{
if($a < $b) return -1;
else return 1;
}
function length($a, $b)
{
if(strlen($a) < strlen($b)) return -1;
else return 1;
}
function length_and_value($a, $b)
{
if(strlen($a) < strlen($b) || $a < $b) return -1;
else return 1;
}
if(is_array($doesntwork))
{
foreach($doesntwork as $id) echo '<br>'.$id;
echo '<hr>';
usort($doesntwork, 'length');
foreach($doesntwork as $id) echo '<br>'.$id;
echo '<hr>';
usort($doesntwork, 'value');
foreach($doesntwork as $id) echo '<br>'.$id;
echo '<hr>';
usort($doesntwork, 'length_and_value');
foreach($doesntwork as $id) echo '<br>'.$id;
echo '<hr>';
}
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=29907&edit=1