Foros del Web » Programando para Internet » PHP »

Renumerar objetos...

Estas en el tema de Renumerar objetos... en el foro de PHP en Foros del Web. Puede que esté muy cerca pero estoy fallando en la lógica... La idea es tomar elementos de un array que ya tienen un valor numerico ...
  #1 (permalink)  
Antiguo 19/07/2010, 19:41
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 9 meses
Puntos: 0
Renumerar objetos...

Puede que esté muy cerca pero estoy fallando en la lógica...
La idea es tomar elementos de un array que ya tienen un valor numerico y reodenarlos de 1 en adelante ya tengo hecho parte del asunto donde filtro y valido los datos a reorganizar, pero para asegurarme de que no se le asignará un numero en uso a otro objeto cree un array que tiene los numeros que no se pueden asignar, entonces supongamos que tengo el numero 10 como en el ejemplo aqui debajo, entonces como el 10 ya existe en el array $categorias, le sumo uno y vuelvo a probar (aquí es donde se me arma lío...) en el codigo que tengo armado si empiezo con 10 me devuelve 12 pero si le doy un 30 por ejemplo, no me devuelve 32 como debería ....

El codigo:

Código PHP:
function nosemueven($n_asignable$no_se_mueven){
    global 
$Num_nuevo;
   
     foreach (
$no_se_mueven as $value){
        if(
$n_asignable==$value){
            
$n_asignable=$n_asignable+1;
        }
        else {
            if(
array_search($n_asignable,$no_se_mueven))
        {
nosemueven($n_asignable$no_se_mueven);}else{
            
$Num_nuevo=$n_asignable;break;}
            
    };
}
echo 
"Numero nuevo 2 dentro de la funcion ".$Num_nuevo."<br/>";
}

//Numeros ya en uso , o sea no asignables
$categorias=array(10,11,12,13,20,30,31,40,41,50,60);


$numero_prueba=30;
nosemueven($numero_prueba$categorias); 
La variable N_asignable es el numero candidato a ser otorgado a quien le corresponda, eso si no existe en el array $categorías, cuando se comprueba que no existe pasa a llamarse Num_nuevo y se le asigna a quien le toque y se pasa al siguiente objeto.
Se aceptan sugerencias, graciassssss!!!
  #2 (permalink)  
Antiguo 19/07/2010, 19:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Renumerar objetos...

Podrías indicar el propósito de ese código. Tal vez haya una mejor manera de hacerlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 20/07/2010, 06:51
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Renumerar objetos...

El proposito es chequear que un numero no exista en un array y si existe sumarle 1 y volver a comprobar
  #4 (permalink)  
Antiguo 20/07/2010, 07:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Renumerar objetos...

¿Algo así?
Código PHP:
Ver original
  1. <?php
  2. $nRand = mt_rand(1,60);
  3. function notInArr($n){
  4.     $arr = array(10,11,12,13,20,30,31,40,41,50,60);
  5.     if(in_array($n,$arr)){
  6.         notInArr(++$n);
  7.     }
  8.     return $n;
  9. }
  10. echo notInArr($nRand);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 20/07/2010, 08:23
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Renumerar objetos...

Cita:
Iniciado por abimaelrc Ver Mensaje
¿Algo así?
Código PHP:
Ver original
  1. <?php
  2. $nRand = mt_rand(1,60);
  3. function notInArr($n){
  4.     $arr = array(10,11,12,13,20,30,31,40,41,50,60);
  5.     if(in_array($n,$arr)){
  6.         notInArr(++$n);
  7.     }
  8.     return $n;
  9. }
  10. echo notInArr($nRand);
Esta cerca pero yo chequeo de a un numero y por ejemplo si le doy un 10 me tiene que devolver 12 porque el 11 ya existe y el 10 también , si le doy 30 me tiene que devolver 32 porque el 30 y el 31 ya existen, se entiende?
lo que hice arriba medio mamarracho, para el 10 me devuelve 12 pero para el 30 no....

Última edición por martuanez; 20/07/2010 a las 08:29
  #6 (permalink)  
Antiguo 20/07/2010, 08:35
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Renumerar objetos...

Ya está lo resolvi, muchas gracias!!!
Código PHP:
$num40;
function 
looop($n)

$arr = array(10,11,12,13,20,30,31,40,41,50,60);
    while(
in_array($n,$arr)){
        
$n=++$n;
    }return 
$n;
}
echo 
"Looop: ".looop($num)."<br/>"
  #7 (permalink)  
Antiguo 20/07/2010, 09:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Renumerar objetos...

También puedes hacerlo de esta forma
Código PHP:
Ver original
  1. <?php
  2. $nRand = mt_rand(1,60);
  3. function notInArr($n){
  4.     $arr = array(10,11,12,13,20,30,31,40,41,50,60);
  5.     if(in_array($n,$arr)){
  6.         $n = notInArr(++$n);
  7.     }
  8.     return $n;
  9. }
  10. echo notInArr($nRand);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 20/07/2010, 09:09
 
Fecha de Ingreso: julio-2008
Mensajes: 109
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Renumerar objetos...

Jeje muy cierto, muchas gracias!!!
  #9 (permalink)  
Antiguo 20/07/2010, 09:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Renumerar objetos...

Me dio curiosidad y tu código es más rápido que hacerlo de la forma como te indique Así que te recomiendo que uses el while, solo con una excepción y es que no tienes que usarlo de esta forma
Código PHP:
Ver original
  1. $n=++$n;
Sino que con esto es suficiente
Código PHP:
Ver original
  1. ++$n;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: objetos
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 16:28.