Foros del Web » Programando para Internet » PHP »

Posicion de un valor en una cadena

Estas en el tema de Posicion de un valor en una cadena en el foro de PHP en Foros del Web. Buenas estaba queriendo saber la posicion de un ";" en una cadena pero no lo consigo, os explico. Por ejemplo la cadena: Código PHP: $cadena  ...
  #1 (permalink)  
Antiguo 13/06/2012, 04:54
 
Fecha de Ingreso: abril-2012
Mensajes: 43
Antigüedad: 12 años
Puntos: 1
Información Posicion de un valor en una cadena

Buenas estaba queriendo saber la posicion de un ";" en una cadena pero no lo consigo, os explico.

Por ejemplo la cadena:

Código PHP:
$cadena "452 652 321 458;5864 474 152 458;456 258 475 6952;"
Quiero saber su posicion, pero, lo que yo espero es que por ejemplo en este caso:

La primera ocurrencia sea 4,
La segunda ocurrencia 9 y
la tercerca ocurrencia 14, es decir que tenga en cuenta los numeros como un todo y no que los tenga en cuenta como unidades.

Alguien sabe como puedo conseguir esto?

Gracias!
  #2 (permalink)  
Antiguo 13/06/2012, 05:20
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Posicion de un valor en una cadena

Revisa este link a ver si te puede ayudar el método:
http://www.php.net/manual/es/function.strpos.php


Te escribo un ejemplo de lo que creo que quieres hacer:
Código:
$strCadena = "452 652 321 458;5864 474 152 458;456 258 475 6952;"; 
$charDelimitador = ";";

// Array para guardar las posiciones encontradas
$arrPosiciones = array();

// Posición del índice actual en la cadena (comenzamos por el principio)
$intPosicionActual = 0;

// Variable que guardará el índice de la ocurrencia, comienza siendo true para que entre en el while
$pos = true;

// Mientras encuentre el delimitador (no devuelva false)
while ($pos != false){

  // Buscamos la posición del delimitador en la cadena a partir de la posición actual
  $pos = strpos($strCadena, $charDelimitador, $intPosicionActual);

  // Si ha encontrado el delimitador
  if ($pos != false){

    // metemos la posición en el array
    array_push($arrPosiciones, $pos);

     // marcamos como posición actual el índice encontrado
    $intPosicionActual = $pos + 1;

    // Si la posición actual es mayor al tamaño de la cadena
    if ($pos > strlen($strCadena)){

      // Marcamos la posición actual como false para que salga del while (para evitar desbordamiento)
      $pos = false;
    }
  }
}

// Para cada posición guardada en el array
for($i=0; $i < sizeOf($arrPosiciones); $i++){
  
  // Imprimimos las posiciones encontradas por orden
  echo $i.'º ocurrencia en el índice '.$arrPosiciones[$i].'<br>';
}
PD: El código no lo he probado así que puede tener errores, pero creo que te ayudará a comprender cómo hacerlo.

Última edición por davidadanu; 13/06/2012 a las 05:46 Razón: Correcciones en el código
  #3 (permalink)  
Antiguo 13/06/2012, 06:02
 
Fecha de Ingreso: abril-2012
Mensajes: 43
Antigüedad: 12 años
Puntos: 1
Respuesta: Posicion de un valor en una cadena

Gracias por el interes , pero no es lo que busco, de hecho yo estoy usando la funcion preg_match_all


Esta funcion
Código PHP:
int preg_match_all string $pattern string $subject [, array &$matches [, int $flags PREG_PATTERN_ORDER [, int $offset ]]] ) 
Te devuelve en el 3er parametro la posicion de las coincidencias, eso ya lo tengo.

Es decir si yo tengo la cadena : "123 456 78911;"

Yo espero y quiero que me diga que la posicion del ";" sea la 4, es decir tome los numeros como un todo, no se si me explico...creo que esto se puede hacer aplicando expresiones regulares pero no lo tengo del todo claro...a ver si alguien que sabe de esto ¿??



Cita:
Iniciado por davidadanu Ver Mensaje
Revisa este link a ver si te puede ayudar el método:
http://www.php.net/manual/es/function.strpos.php


Te escribo un ejemplo de lo que creo que quieres hacer:
Código:
$strCadena = "452 652 321 458;5864 474 152 458;456 258 475 6952;"; 
$charDelimitador = ";";

// Array para guardar las posiciones encontradas
$arrPosiciones = array();

// Posición del índice actual en la cadena (comenzamos por el principio)
$intPosicionActual = 0;

// Variable que guardará el índice de la ocurrencia, comienza siendo true para que entre en el while
$pos = true;

// Mientras encuentre el delimitador (no devuelva false)
while ($pos != false){

  // Buscamos la posición del delimitador en la cadena a partir de la posición actual
  $pos = strpos($strCadena, $charDelimitador, $intPosicionActual);

  // Si ha encontrado el delimitador
  if ($pos != false){

    // metemos la posición en el array
    array_push($arrPosiciones, $pos);

     // marcamos como posición actual el índice encontrado
    $intPosicionActual = $pos + 1;

    // Si la posición actual es mayor al tamaño de la cadena
    if ($pos > strlen($strCadena)){

      // Marcamos la posición actual como false para que salga del while (para evitar desbordamiento)
      $pos = false;
    }
  }
}

// Para cada posición guardada en el array
for($i=0; $i < sizeOf($arrPosiciones); $i++){
  
  // Imprimimos las posiciones encontradas por orden
  echo $i.'º ocurrencia en el índice '.$arrPosiciones[$i].'<br>';
}
PD: El código no lo he probado así que puede tener errores, pero creo que te ayudará a comprender cómo hacerlo.
  #4 (permalink)  
Antiguo 13/06/2012, 07:45
Avatar de fjrueda  
Fecha de Ingreso: marzo-2008
Ubicación: Bucaramanga
Mensajes: 313
Antigüedad: 16 años, 1 mes
Puntos: 35
Respuesta: Posicion de un valor en una cadena

Masterjose ... creo que estas mal, las expresiones regulares no se usan para eso exactamente.

ahora yo le diria que lo solucione con un clico usando explode y strpos.

Código PHP:

//Creamos cadena
$cadena "123 4567 89;";

//Creamos array segun espacios encontrados
$espacio explode(' '$cadena);

//Contamos el array
$countcadena count($espacio);

//Inicamos un segundo contador
$posio 1;

for(
$x=0$x<=$countcadena$x++)
{
    if(
strpos($espacio[$x], ";"))
    { break(); }
    else
    { 
$posio++; }
}

echo 
"mi ';' esta de numero ".$posio."; 
Bueno eso seria, no lo he probado, pero hagale y me cuenta.
  #5 (permalink)  
Antiguo 14/06/2012, 03:26
 
Fecha de Ingreso: abril-2012
Mensajes: 43
Antigüedad: 12 años
Puntos: 1
Respuesta: Posicion de un valor en una cadena

Buah! Gracias crack! mira que conozco como usar esas funciones, pero no se me habia ocurrido usarlas asi, me lo has solucionado.

Merci tiu!

Cita:
Iniciado por fjrueda Ver Mensaje
Masterjose ... creo que estas mal, las expresiones regulares no se usan para eso exactamente.

ahora yo le diria que lo solucione con un clico usando explode y strpos.

Código PHP:

//Creamos cadena
$cadena "123 4567 89;";

//Creamos array segun espacios encontrados
$espacio explode(' '$cadena);

//Contamos el array
$countcadena count($espacio);

//Inicamos un segundo contador
$posio 1;

for(
$x=0$x<=$countcadena$x++)
{
    if(
strpos($espacio[$x], ";"))
    { break(); }
    else
    { 
$posio++; }
}

echo 
"mi ';' esta de numero ".$posio."; 
Bueno eso seria, no lo he probado, pero hagale y me cuenta.

Etiquetas: posicion, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:59.