ID: 29907 Updated by: [EMAIL PROTECTED] -Summary: stange str comparing results when using usort Reported By: benjamin dot lewis at samail dot net -Status: Open +Status: Feedback Bug Type: Arrays related Operating System: redhat PHP Version: 4.3.7 New Comment:
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. Previous Comments: ------------------------------------------------------------------------ [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