(1 votos)

He aquí unas funciones que me he hecho para manejarme con el xml (basadas en simplexml).

Leer xml: Sirve para leer un código xml de un fichero

<?php 
function leer_xml($fichero){ 
//Comprobamos que existe el fichero 
if (file_exists($fichero)) { 
//Lo cargamos como objeto con simplexml 
$dom = simplexml_load_file($fichero); 
} 
else{ 
echo 'Fallo al abrir '.$fichero.'<br/>'; 
$dom = -1; 
} 
 
if(!$dom) return -1; 
return $dom; 
} 
?>

Una alternativa sería para leer xml desde una variable:

 <?php       
 function leer_xml ( $xml ){       
 //Comprobamos que existe la       variable       
 if ( $xml ) {       
 //Lo cargamos como objeto con       simplexml       
 $dom = simplexml_load_string ( $xml );        
}        
else{       
echo 'Fallo al leer el       código<br/>' ;       
 $dom = - 1 ;       
}       
 
if(! $dom ) return - 1 ;       
return $dom ;       
}       
 ?> 

Función insertar_nodo: Añade un nodo/hijo a la estructura xml

 <?php       
 function insertar_nodo ( $nodo , $datos , $fichero , $duplicar , $duplicados ){  
  //Leemos fichero       
 if(( $xml = leer_xml ( $fichero )) == - 1 ) return - 1 ;       
  
  //Comprobamos si puede haber       nodos duplicados o no y si los hay       
 if( $duplicar == 0 ) $stop = buscar_nodo ( $nodo , $duplicados , $fichero );       
 else $stop = 0 ;       
  
  //Si no hay nodos duplicados o       si puede haberlos, seguimos       
 if( $stop == 0 ){       
 //Guardamos todos los datos en       un nuevo nodo       
 $tag = $xml -> addChild ( $nodo );  
  foreach( $datos as $valor ) $tag -> addChild ( $valor [ 'tag' ], $valor [ 'dato' ]);       
 //Guardamos el fichero       
 $xml -> asXML ( $fichero );       
 }       
 
 return 0 ;       
}       
 ?> 

Buscar nodo: Busca dentro de los nodos de un xml

 <?php       
 function buscar_nodo ( $nodo , $datos , $fichero , $case_sensitive ){       
 
 $encontrado = 0 ;       
 //Leemos el fichero       
 if(( $xml = leer_xml ( $fichero )) == - 1 ) return - 1 ;       
  
  //Comprobamos si es case       sensitive       
 if(! $case_sensitive ) $case_sensitive = 0 ;  
  switch( $case_sensitive ){       
 case 0 :       
 //Recorremos los nodos       
 foreach( $xml -> $nodo as $tag )       
 foreach( $datos as $valor )       
 //Comparamos valor del nodo con       el nuestro       
 if( strtolower ( $tag -> $valor [ 'tag' ]) == strtolower ( $valor [ 'dato' ])) $encontrado = 1 ;       
 break;       
 case 1 :  
  foreach( $xml -> $nodo as $tag )       
 foreach( $datos as $valor )       
 if( $tag -> $valor [ 'tag' ] == $valor [ 'dato' ]) $encontrado = 1 ;       
 break;  
  }       
 
 return $encontrado ;       
}       
 ?> 

Modificar nodo: Modifica los valores de un nodo:

 

Leer más...

(1 votos)

Pronto veremos varias funciones en las que se usan expresiones regulares para manipular o buscar cadenas, así que os voy a dejar un manual donde se explica como utilizar estas expresiones:

/*Sintaxis básica de una expresión regular:

Los símbolos especiales “^” y “$” se usan para matchear el principio y el final de un string respectivamente.
Por ejemplo:
“^el” Matchea strings que empiezan con “el”
“colorin colorado$” Matchea strings que terminan en “colorin colorado”
“^abc$” String que empieza y termina en abc, es decir solo “abc” matchea
“abc” Un string que contiene “abc” por ejemplo “abc” ,”gfabc”, “algoabcfgeh”, etc...

Los símbolos “*” , “+” y “?” denotan la cantidad de veces que un caracter o una secuencia de caracteres
puede ocurrir. Y denotan 0 o más, una o más y cero o una ocurrencias respectivamente.
Por ejemplo:
“ab*” Matchea strings que contienen una “a” seguida de cero o mas “b”
Ej: “a”, “ab”, “cabbbb”, etc
“ab+” Matchea strings que contienen una “a” seguida de una o mas “b”
“ab?” Matchea strings que contienen una “a” seguida o no de una “b” pero no mas de 1.
“a?b+$” Matchea “a” seguida de una o mas “b” terminando el string.

Para indicar rangos de ocurrencias distintas pueden especificarse la cantidad máxima y mínima de
ocurrencias usando llaves de la forma {min,max}
“ab{2}” Una “a” seguida de exactamente 2 “b”
“ab{2,}” Una “a” seguida de 2 o mas “b”
“ab{3,5}” Una “a” seguida de 3 a 5 “b” (“abbb”, “abbbb”, ”abbbbb”)

Leer más...

La función ereg permite buscar una cadena dentro de otra. La función eregi hace lo mismo, pero ignorando mayúsculas y minúsculas (case insensitive).

Esta función, aunque es muy útil, no estará disponible en la versión 6 de php y será sustituida por la función preg_match.

Aún así, vamos a ver que hace esta función y cómo debemos usarla.

Supongamos que tenemos en un vector una lista de palabras o cadenas y queremos mostrar solo aquellas que contienen la letra "c".

<?php
//Guardamos las cadenas de texto en un vector
$v[0] = 'Primera cadena';
$v[1] = 'Esta no se muestra';
$v[2] = 'Casa';
$v[3] = 'php';
$v[4] = 'creación';
//Calculamos el tamaño del vector
$size = count($v);
/*Realizamos un bucle que recorra el vector y busque la letra "c" en cada una de las cadenas. Si la encuentra, muestra esa cadena, si no, muestra un aviso de que no ha encontrado la letra "c"*/
for($i=0;$i<$size;$i++){
if(eregi('c',$v[$i])){
echo "Encontrada letra \"c\" en la posición $i del vector: $v[$i]<br>";
}
else {
echo "Letra \"c\" <b>no</b> encontrada en la posición $i del vector<br>";
}
}
?>

Como vemos, el funcionamiento es sencillo. A la función ereg/eregi solo se le pasan dos valores: la letra, palabra o cadena de texto a buscar, seguida de la cadena donde buscar, que normalmente estará en una variable.

Si encuentra lo que buscamos, devuelve 1, de lo contrario, devuelve 0, de ahí que incluyamos la función dentro de la función if, para que en caso de encontrar la cadena de texto realice una acción y en caso de no encontrarla, pueda realizar otra acción.

(2 votos)

Un vector, en lenguajes de programación, no es lo mismo que un vector en matemáticas.

Un vector (o array) en php es un conjunto de datos. Se declara como el resto de variables, pero al final de la variable lleva dos corchetes ([ ]) donde se indica la posición del vector a la que acceder.

vector php vector php

Hay varias vormas de crear un vector:

Una forma sería indicando entre los corchetes la posición a la cual acceder.

$vector[0] = 'Dato 1';

$vector[1] = 'Dato 2';

$vector[2] = 'Dato 3';

 

Otra forma sería dejando el contenido de los corchetes en blanco. En este caso, php se encarga de incrementar el contador, empezando a contar desde cero.

$vector[] = 'Dato 1';

$vector[] = 'Dato 2';

$vector[] = 'Dato 3';

 

También se pueden crear de la siguiente forma:

$vector = array ("Dato 1", "Dato 2", "Dato 3", "Dato 4");

 

Las posiciones de los vectores, por lo general, son numéricas, pero también pueden ser palabras.

$vector[nombre] = "Mi nombre";

$vector[apellido] = "Mi apellido";

 

Hay algunas funciones relacionadas con los vectores:

Leer más...

Aquí está nuestra joyita. El bucle for.

No tiene nada del otro mundo. No se necesitan conocimientos avanzados ni una mente privilegiada para entenderlo, pero lo curioso es que a la gente le cuesta pillarlo. Tengo compañeros de clase que tardaron semanas, mientras que otros lo entendimos en días. Yo creo que es cuestión de práctica. Hacer muchos programitas que usen for, hacer cambios en los programas y ver qué resultados cambian. De esta forma, sacais vuestras propias conclusiones.

Supongo que la dificultad está en que en la vida real no estamos acostumbrados a pensar en bucles, de ahí que al principio nos cueste. La clave está en practicar. Una vez se domina el for, ya no hay nada mucho más difícil, pues ye la has pillado la lógica al php, y cualquier cosa nueva que veas, la aprendes al instante.

El bucle for no se diferencia demasiado del buble while. Es más, con el bucle while se puede hacer lo mismo que con el bucle for, pero con más lineas.

El bucle FOR: Su forma.

for(inicializamos, condición del bucle, actualizamos){

instrucciones del bucle;

}

El bucle for se suele iniciar una variable contador, luego se pone la condición sobre esa variable, y luego se actualiza esa variable.

Por ejemplo, vamos a utilizar el bucle for para hacer la tabla de multiplicar del 2.

<?php
for($i=0;$i<=10;$i++){
$resultado = 2 * $i;
echo "2 * $i = $resultado<br>";
}
?>

Explicación:

Leer más...