wordpres page name is_single is_page php list arrays url-rewriting explode

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 .



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