We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

usort() function producing bad results on a linux environment, ok on windows

cabrera48
cabrera48 asked
on
Medium Priority
296 Views
Last Modified: 2012-05-07
This is really weird, the same code works on windows, but not on linux.

When I run the code below on a windows machine with PHP 5.2.5, it works perfect, I get the output array alphabetically ordered.

When I run it on a linux box running PHP 5.1.6 I get an array that doesn't have the same order as the original array, but it is also not properly sorted.

Do you guys know what part of my code is "environment dependant"? I can hardly believe the same code will produce two different results in different platforms...


// The code here:
 
class TestTwo{
 
                      // This is just the contructor / driver:
	function TestTwo(){
 
                                          // bootstrapping the input array:
		$sort_array = file_get_contents('test_array_sort.txt');
		$attributes_array = unserialize($sort_array);
 
		$this->attributes_array_sorted = $this->createAttributesArraySorted($attributes_array);			
                                          // At this point, I get the right output on Windows, and the badly sorted array in Linux
	}
	
	private function createAttributesArraySorted($attributes_array_){
		
		foreach($attributes_array_ as &$val){
 
			usort($val['children_nodes'], 'TestTwo::cpm_node');
 
		}
		return $attributes_array_;
		
	} /* end private function createAttributesArraySorted($attributes_array_) */
	
    /*
     * Auxiliary function used to sort attributes in alphabetical order 
     */
    static function cpm_node($a,$b){
    	
    	return strcasecmp($a['node_name'], $b['node_name']);
 
    } /* end static function cpm_nodes() */
    
} /* end class TestTwo */

Open in new window

Comment
Watch Question

Author

Commented:
A bit more of information: it looks like the cpm_node() function never gets called on linux.

I put a print statement inside of it, and I can see the print output on windows, on linux it doesn't display.

So the problem seem to be in this line:

usort($val['children_nodes'], 'TestTwo::cpm_node');
 
Why would that fail to call TestTwo::cpm_node static function on linux?
CERTIFIED EXPERT
Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview

Author

Commented:
You are right, that was the problem, nothing to do with linux, but the PHP version I was using there.

Thank you.
CERTIFIED EXPERT

Commented:
Thanks for the question and the points.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.