note 35194 added to function.is-array

From: Date: Fri, 22 Aug 2003 20:20:59 +0000
Subject: note 35194 added to function.is-array
Groups: php.notes 
Request: Send a blank email to php-notes+get-54888@lists.php.net to get a copy of this message
All arrays in PHP are associative arrays, but it is quite easy to treat an associative array just like it is a sequential array. However, when dealing with XML-RPC, it is necessary to know whether an array is associative or sequential, so I created this function. It isn't perfect, since an associative array that just happens to have sequential, integer keys starting with 0 will 'look' exactly like a sequential array, and will fool this function. /**************************************************************** * is_assoc_array tries to decide whether or not a given array * * is an associative array, or a sequential array. Of course, no * * such distinction is made by PHP, so it really just tests * * whether or not a given array could possibly be a sequential * * array. Since an associative array with sequential, integer * * keys 'looks' just like a sequential array, this function will * * be fooled. * * * * BUG: Associative arrays with sequential, integer keys 'look' * * just like sequential arrays, and will be identified as such. * * * ****************************************************************/ function is_assoc_array( $php_val ) { if( !is_array( $php_val ) ){ # Neither an associative, nor non-associative array. return false; } $given_keys = array_keys( $php_val ); $non_assoc_keys = range( 0, count( $php_val ) ); if( function_exists( 'array_diff_assoc' ) ) { # PHP > 4.3.0 if( array_diff_assoc( $given_keys, $non_assoc_keys ) ){ return true; } else { return false; } } else { if( array_diff( $given_keys, $non_assoc_keys ) and array_diff( $non_assoc_keys, $given_keys ) ){ return true; } else { return false; } } } ---- Manual Page -- http://www.php.net/manual/en/function.is-array.php Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+35194 Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+35194&report=yes Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+35194&report=yes

« previous php.notes (#54888) next »