funcion PHP is_arr_num saber si un arrays es numerico o asociativo
February 26th, 2010 by pako received 1 Comment »PHP maneja dos tipos de arreglos(arrays) numéricos y asociativos, los primeros son arreglos que manejan indices de 0 a n de forma secuencial ejemplo
$a=array(1,2,3,"hola Mundo","devTics");
print_r($a);
/*
out:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => hola Mundo
[4] => devTics
)
*/
o bien los asociativos, que son arreglos que utilizan cadenas como indices
$a=array("nombre"=>pako, "web"=>"http://www.devtics.com.mx", "twitter"=>"@fcoDiaz");
print_r($a);
/*
out:
Array
(
[nombre] => pako
[web] => http://www.devtics.com.mx
[twitter] => @fcoDiaz
)
*/
en unos de mis tantos días de trabajo me encontré con la necesidad de saber si un arreglo es asociativo o bien si es numérico, aunque también puede estar “combinados”, pero cualquier arreglo con un indice que sea un “string” debería de considerarse como asociativo aunque el resto de los indices sean numéricos ya sea consecutivos o no.
PHP tiene una función que nos permite saber si una variable es un array (is_array), pero no existe una que indique si es asociativo o no, para eso cree esta función que nos retorna true si se trata de un arreglo numérico, si encuentra un indice que no sea numérico nos retornara un false lo que nos indicara que se trata de un array asociativo
<?php
/**
* @author fcoDiaz <wariodiaz@gmail.com> *
* @name is_array_num
* @link http://www.devtics.com.mx
* @param $arr arreglo a evaluar
* @return boolean
* <p><b>true:</b> si el arreglo es numerico, se considera numerico el array
* que tenga solamente indices numericos ya sea consecutivos o no</p>
* <p><b>false:</b> si el arreglo es asociativo, se cosidera asociativo el array
* cuando este contiene un indice que no sea numerico</p>
* <code>
* $a = array(
* array(1,2,3),
* array('nombre'=>"pako", "email"=>wariodiaz@gmail.com, "web"=>"www.devtics.com.mx"),
* array(0=>1,1=>4,"saludo"=>"hola Mundo")
* );
*
* foreach($a as $i =>$v)
* if(is_arr_num($v))
* echo "$a[$i] es numericon";
* else
* echo "$a[$i] es asociativon";
* out:
* $a[0] es numerico
* $a[1] es asocitivo
* $a[2] es asocitivo
* </code>
*/
function is_arr_num($arr){
if(!is_array($arr))return false;
foreach($arr as $i =>$v){
if(!is_numeric($i))return false;
}
return true;
}
?>
Posted under: PHP








Interesante, sencillo, y útil. Gracias.