Eliminar posición de un array en PHP
Para borrar variables se utiliza unset(), también para eliminar posiciones de un array, pero si sólo se usa unset() la posición no se elimina del todo, sigue existiendo pero esta vacía. No sé si lo estoy explicando bien, pero con los ejemplos se entiende mejor. Es bastante sencillo, no es algo complicado de hacer, sólo hay que entenderlo.
Por ejemplo, con este array:
$array = 'ni sus,manos son,tan blancas,ni son,blancas sus,palomas';
$array = explode(',',$array);
Array
(
[0] => ni sus
[1] => manos son
[2] => tan blancas
[3] => ni son
[4] => blancas sus
[5] => palomas
)
Si se hace
unset($array[4]);
Quedará algo como:
Array
(
[0] => ni sus
[1] => manos son
[2] => tan blancas
[3] => ni son
[5] => palomas
)
Es decir, el elemento no existe pero su posición en el array no se ha adaptado, hace un salto del 3 al 5 y en ocasiones lo ideal sería que el 4 se eliminara y el siguiente (el 5) pasara a ocupar su posición.
Para eso se puede utilizar la función array_values(), por ejemplo:
$array = array_values($array);
Haría que el resultado fuera:
Array
(
[0] => ni sus
[1] => manos son
[2] => tan blancas
[3] => ni son
[4] => palomas
)
Encontrar todos los links de una página con PHP
No hay mucho que decir sobre esto… sólo dejar el código:
$html = file_get_contents('http://www.example.com');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
echo $url.'';
}
Visto en css-tricks
Recursividad en mkdir de PHP
No en todas las versiones de PHP se puede hacer un mkdir recursivo directamente, mkdir('/1/2/3/'); aunque es lo ideal, en versiones antiguas (la opción se añadió en la 5.0) no se podía. Si en tu servidor hay instalada una versión vieja de PHP y no tienes la posibilidad de actualizarlo tu mismo, puedes utilizar una función propia que haga el mkdir recursivo. En el manual oficial de php se explica a fondo como utilizar correctamente la función oficial, con los permisos y recursividad que se necesiten.
Como por ejemplo:
function mkdir_recursivo($pathname, $mode){
umask(0);
is_dir(dirname($pathname)) || mkdir_recursive(dirname($pathname), $mode);
return is_dir($pathname) || mkdir($pathname, $mode);
}
Un ejemplo de uso de esta función sería:
$ruta = 'carpeta/subcarpeta/subsubcarpeta/';
mkdir_recursivo($ruta,0777);
Donde 0777 hay que poner los permisos que se quieran (con el 0 delante).
En cualquier caso, recomiendo leer el manual oficial y visitar estos enlaces para entender y poder escoger la opción que convenga.
- Manual oficial de PHP: mkdir
- Mkdir recursivo no funciona cuando el path incluye una carpeta raíz inexistente.
Suerte.
Detectar petición AJAX con PHP
Con PHP se puede saber si una página se carga a través de una petición AJAX, puede ser útil para hacer que un contenido se vea sólo si se esta cargando con AJAX. O todo lo contrario, bloquear el contenido para estas peticiones.
Para detectarlo se utiliza la variable de servidor $_SERVER['HTTP_X_REQUESTED_WITH']:
if(
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
){
# Ejecuta si la petición es a través de AJAX.
}else{
# Ejecuta si la petición NO es a través de AJAX.
}
Y poco más que contar.