Obtener el ID de la URL

Digamos que tenemos un conjunto de URL como este

yoursite.com/39827-key1-key2-key3
yoursite.com/132-key1-key2-key3
yoursite.com/9223455-key1-key2-key3

y así sucesivamente y digamos que con la ayuda de .htaccess podemos apuntar todas estas URL al archivo digamos info.php con el código

<?=id?>

debería dar los siguientes identificadores (con respecto a cada URL)

39827-key1-key2-key3
132-key1-key2-key3
9223455-key1-key2-key3

Mi pregunta ahora es que hay alguna manera de que solo obtengamos el número antes del primero (-) digamos

$id = 39827-key1-key2-key3

tenemos que hacerlo

$realid = 39827

así que me pregunto si hay preg_replace o alguna idea que pueda eliminar primero (-) y todo después.

ejemplo

For $id = 39827-key1-key2-key3
$realid = (something),$id
Then finally $realid = 39827

Me ayudará a crear una URL fácil de entender y recuperar sus datos de la base de datos.

Gracias y perdón por el mal inglés.

preguntado el 10 de mayo de 11 a las 12:05

3 Respuestas

La forma más rápida (creo) sería con strpos y substr:

<?php
$str = "9223455-key1-key2-key3";     
$str = substr($str, 0, strpos($str, '-')); // 9223455

Vea puntos de referencia contra explode y preg_match (1,000,000 iteraciones):

explode + array_shift: 2.7870438098907s
substr + strpos:       1.0809638500214s
preg_match:            1.8446760177612s

contestado el 10 de mayo de 11 a las 17:05

Gracias por publicar los puntos de referencia. Normalmente me sumerjo en las soluciones de matriz porque nunca puedo recordar el orden de los argumentos a substr() strpos() y los de su calaña sin ir a los médicos. - Michael Berkowski

Utilización de explode() con array_shift():

$id = "39827-key1-key2-key3";
$realid = array_shift(explode("-", $id));

contestado el 10 de mayo de 11 a las 16:05

explode("-", $id, 2) optimizaría esto aún más. - día solitario

Posiblemente, la opción más rápida sería utilizar explode():

$id = '39827-key1-key2-key3';
$id_exp = explode('-', $id);
$num_id = $id_exp[0];
// You can get key1, key2, key3 via $id_exp[1], [2], [3], etc.

Otra sería usar expresiones regulares, pero si sabe que el formato es siempre este, no tiene mucho sentido tener la sobrecarga de inicializar el motor de expresiones regulares.

contestado el 10 de mayo de 11 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.