Sencillo código en PHP para añadir elementos a un array y ordenarlos

En un post anterior explicábamos como construir una lista tipo SELECT (dinámica) desde un array y recorrerla, con el fin de complementar el trabajo con arrays, en este artículo queremos presentar un sencillo ejemplo con código referente al uso de dos funciones PHP básicas para arrays:

  • array_push: Añade elementos al final de una lista
  • array_unshift: Añade elementos al principio de una lista

Por definición un array está formado por una colección variable o no de elementos, dichos elementos comienzan a numerarse desde el 0 en adelante, de esta forma quedan referenciados por un índice numérico.

0 [enero] 1 [febrero] 2 [marzo] 3 [abril] … (enero ocupa la primera posición del array que corresponde a numeración de índice 0)

Para nuestro ejemplo utilizaremos un array compuesto por ciudades del mundo.

<?php $ciudades = array('París', 'Nueva York', 'Moscú', 'Oslo', 'Madrid', 'Roma', 'Lisboa', 'Buenos Aires', 'Quito'); ?>

Según los expuesto ‘París’ ocupa la posición de índice 0, o lo que es lo mismo para visualizarla tendríamos que escribir:

<?php echo $ciudades[0]; ?>

Para añadir una nueva ciudad al final de nuestro array utilizaríamos por ejemplo:

<?php array_push($ciudades, 'Londres'); ?>

Así ‘Londres’ pasaría a situarse después de ‘Quito’.

Para añadir una nueva ciudad al principio del array, sería así:

<?php array_unshift($ciudades, 'Tokio'); ?>

Ahora nuestra lista quedaría así:

‘Tokio’,’París’, ‘Nueva York’, ‘Moscú’, ‘Oslo’, ‘Madrid’, ‘Roma’, ‘Lisboa’, ‘Buenos Aires’, ‘Quito’,’Londres’

Una vez visto el funcionamiento vamos a pasar a un código algo más animado con el fin de poder añadir elementos a nuestro array por formulario y ordenar a la vez el resultado de nuestra lista con las funciones sort (realiza orden ascendente) y rsort (realiza orden descendente).

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tutorial añadir elementos a array, por WebReunidos</title>
</head>

<body>
<?php
$ciudades = array('París', 'Nueva York', 'Moscú', 'Oslo', 'Madrid', 'Roma', 'Lisboa', 'Buenos Aires', 'Quito');

if($_POST){
	if($_POST['ciudad1']) array_push($ciudades, $_POST['ciudad1']);
	if($_POST['ciudad2']) array_unshift($ciudades, $_POST['ciudad2']);	
	
	switch($_POST['ordenar']){
		case 1 : sort($ciudades); break;
		case 2 : rsort($ciudades); break;
		}
}

for ($i=0;$i<sizeof($ciudades);$i++){
	echo $ciudades[$i].'<br />';
}
?>
<form id="form" name="form" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
  <p>Ciudad 1 <input type="text" name="ciudad1" /></p>
  <p>Ciudad 2 <input type="text" name="ciudad2" /></p>
  <p>Ordenar resultado: 
    <input name="ordenar" type="radio" value="1" checked="checked"/>Ascendente  
    <input type="radio" name="ordenar" value="2"/>Descendente  
  </p>
  <p>
    <input type="submit" value="Enviar" />
  </p>
</form>
</body>
</html>

Bien nuestro ejemplo muestra la lista inicial de ciudades tal y como está en el array, y presenta un formulario donde recogeremos los datos de dos ciudades y un orden para mostar el resultado.

Cuando el formulario se envía, ciudad1 se añadirá al final de la lista y ciudad2 se añadirá al principio, luego pasa por un switch donde según la marca de ordenación el resultado será ascendente o descendente.

Si no se introducen datos en los inputs, el resultado sería la lista de ciudades original ordenada.