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