note 35194 modified in function.is-array by danbrown

From: Date: Sat, 27 Dec 2008 16:51:41 +0000
Subject: note 35194 modified in function.is-array by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-148570@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. <?php /**************************************************************** * 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; } } } ?> --was-- 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; } } } http://php.net/manual/en/function.is-array.php

« previous php.notes (#148570) next »