php - name - wordpress function if page id
lista y explota (8)
Estoy intentando usar la reescritura de URL en mi sitio web y quiero usar las funciones list()
y explode()
para obtener el contenido correcto. Actualmente mi código se ve así:
list($dir, $act) = explode(''/'',$url);
En este caso $url
es igual a todo después de la primera barra en la URL absoluta, es decir, http://example.com/random/stuff => $url = random/stuff/
esto funcionaría bien, pero si quiero ir a http://example.com/random/
luego imprimirá un aviso en la página. ¿Cómo evito que aparezca el aviso? ¿Necesito usar algo que no sea la función list()
?
En este momento el aviso es "Aviso: compensación indefinida: 1 ..."
¡Gracias por la ayuda!
Debe verificar cuántos segmentos de ruta contiene la URL:
$segments = explode(''/'', $url);
if (count($segments) !== 2) {
// error
} else {
list($dir, $act) = $segments;
}
Pero tal vez deberías elegir un enfoque más flexible que utilizar la list
.
Echa un vistazo a parse_url
En lugar de explotar la URL completa, pruebe $_SERVER[''PATH_INFO'']
, suponiendo que ''/ random'' nombra el script.
La forma correcta de suprimir la asignación de lista E_NOTICE a partir de PHP 5.4+ es la siguiente:
@list($dir, $act) = explode(''/'', $url);
Si $url
no contiene /
, explotar devolverá un elemento y $act
será NULL
.
La respuesta simple y fea es prefijar todo con un solo ''@'' que suprime las salidas de error. $ act se establecerá en nulo en ese caso porque bajo el capó, es equivalente a:
$foo = explode(''/'',$url);
$dir = $foo[0];
$act = $foo[1]; // This is where the notice comes from
Prueba esto :
list($dir, $act) = array_pad(explode(''/'',$url), 2, '''');
array_pad
completa la matriz con tus valores, aquí está: ''''
.
Una solución sería dividir su línea de código en varias, para garantizar que nunca asigne valores no existentes a las variables, que es lo que está haciendo cuando explode
solo devuelve una parte de la URL.
Para eso, no usar la list
parece ser la solución correcta, ya que, con la lista, debes saber cuántos elementos devolverá la expresión a la derecha de =
Y, en esta situación, no sabes cuántos elementos explode
.
Por ejemplo, algo como esto podría estar bien:
$parts = explode(''/'', $url);
if (isset($parts[0])) {
$dir = $parts[0];
if (isset($parts[1])) {
$act = $parts[1];
}
}
Por supuesto, depende de usted ocuparse de la situación en la que $dir
y / o $act
no están configurados, más adelante en su secuencia de comandos.
Otra solución sería comprobar cuántos elementos volverán a explotar (contando un número de /
por ejemplo) ; pero igual tendrá que lidiar con al menos dos casos.
para deshacerse del aviso:
list($dir, $act) = explode(''/'',$url);
pero tal vez una mejor solución sería:
$segments = explode (''/'', $url);
$dir = array_shift ($segments);
$act = array_shift ($segments);
si no hay un segundo segmento, $ act sería nulo y también puede más de 2 segmentos de esta manera