PHP - Cambiar posicionamiento de un Array de dos dimensiones PHP

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

Cambiar posicionamiento de un Array de dos dimensiones PHP

Publicado por Guillermo (12 intervenciones) el 04/12/2020 19:27:18
Buenas a todos una vez mas ,

Vamos con otro tema interesante y que puede ayudar a varios , resuelto el problema anterior he logrado tener los datos metido en un array de dos dimensiones es decir $variable[0][0] , el problema viene con el ingreso de nueva informacion en base de datos , esto origina que el array cambie de posición sus elementos.

Tengo alguna idea de mover o definir nuevas posiciones en un array de una dimensión pero no de dos.. a ver si alguno tiene algo mas de conocimiento, de todas formas lo sigo intentando y si logro solución la subo para compartirla!

Un saludo y buen finde a todos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Cambiar posicionamiento de un Array de dos dimensiones PHP

Publicado por Alejandro (839 intervenciones) el 05/12/2020 00:37:50
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Es igual que un arreglo de una dimensión solo que el elemento es otro arreglo.
1
2
3
4
5
6
7
8
9
10
11
12
$miArreglo = array(
	array(101,102,103,104,105),
	array(301,302,303,104,305),
	array(401,402,403,104,405),
	array(501,502,503,104,505)
);
 
array_splice($miArreglo,1,0,array(array(201,202,203,204,205)));
 
foreach($miArreglo as $fila){
	echo implode(' - ', $fila).'<br />';
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

Cambiar posicionamiento de un Array de dos dimensiones PHP

Publicado por Guillermo (12 intervenciones) el 05/12/2020 01:27:00
Buenas Alejandro,

Una vez mas gracias por la respuesta pero creo que en este caso o me he explicado mal o no entiendo del todo la solucion que propones.

He copiado el codigo que has facilitado para poder entender el funcionamiento y lo detallo por si hay algo que no entiendo

- La primera parte lo que haces es formar un array de dos dimensiones para poder hacer el ejemplo similar a lo que te mencionaba , depues tienes la linea que dice

array_splice($miArreglo,1,0,array(array(201,202,203,204,205)));

Entiendo que dejando de lado la funcion de array_splice el $miArreglo es el array, el 1 es la posicion en la que lo colocas , el 0 es el numero de filas por detras de esa posicion que seran eliminadas al colocar el nuevo array y este nuevo array es el array(201,202,203,204,205).

Explico todo esto por si alguien es nuevo como yo y que pueda seguir el hilo , si me confundo me corriges en lo que sea .


El problema que planteo yo creo que va un poco mas lejos , en este ejemplo ya tienes ordenados o conoces el orden en el que vienen las filas en el primer array

1
2
3
4
$mysql_objeto_cabeza = mysqli_query($conexion,"SELECT * FROM objetos WHERE idObjeto = '$cabeza' or idObjeto = '$pecho' or idObjeto = '$mano_izq' ");
while ($resultado = mysqli_fetch_array($mysql_objeto_cabeza)){
    $objetos_armadura[]=$resultado;
}

En mi caso tengo esto (he simplificado un poco la query), la primera vez que hice esa llamada la informacion me salía ordenada, primero me salieron los datos de cabeza, luego pecho y por ultimo de la mano. Casualmente ese es el mismo orden en el que están en la BBDD metidos. Al añadir una nueva "cabeza" esta se ha colocado en ultimo lugar en la BBDD como es lógico, y el problema es que al realizar de nuevo la query ahora me ha sacado los datos de pecho , mano y por ultimo cabeza.

Sigo teniendo todos los datos pero yo tenia un código posterior asociado con css que depende del orden de salida, si el orden varia en función de la ubicación de los objetos en la tabla se me des configurará siempre...

La idea es saber si puedo forzar un orden independientemente de como lo lea , obligar a que la primera siempre sea la cabeza la segunda el pecho y por ultimo la mano izquierda.

Esos tanto la cabeza como la mano y el pecho están en una tabla de objetos y tengo otra tabla con la armadura del personaje , lo que hago es leer la armadura del personaje rescatar los ids de las partes de la armadura y buscar esos ids en la tabla de objetos , digo esto ultimo por explicar un poco mas el entorno.

Quedo a la espera de novedades , muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

Cambiar posicionamiento de un Array de dos dimensiones PHP

Publicado por Guillermo (12 intervenciones) el 05/12/2020 01:54:23
Buenas ,

Te adjunto el parche que uso por ahora para poder avanzar con el resto del desarrollo es la unica forma que se me ha ocurrido , un poco larga y pesada seguro que se puede simplificar pero asi se entiende mejor la idea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$mysql_objeto_cabeza = mysqli_query($conexion,"SELECT * FROM objetos WHERE idObjeto = '$cabeza' or idObjeto = '$pecho' or idObjeto = '$mano_izq' or idObjeto = '$mano_der' or idObjeto = '$piernas' or idObjeto = '$pies' or idObjeto = '$extra_1' or idObjeto = '$extra_2'");
while ($resultado = mysqli_fetch_array($mysql_objeto_cabeza)){
     $objetos_armadura[]=$resultado;
}
 
for ($a=0;$a<=7;$a++){
      if ($cabeza == $objetos_armadura[$a][0]){
          for($i=0;$i<=17;$i++){
                $acumulativo .=  $objetos_armadura[$a][$i];
                if($i != 17 ){
                       $acumulativo .= ",";
                }else{
                     $valores_objeto_cabeza = explode(",",$acumulativo);
                }
          }
      $acumulativo = "";
      }
      if ($pecho == $objetos_armadura[$a][0]){
         for($i=0;$i<=17;$i++){
                $acumulativo .=  $objetos_armadura[$a][$i];
                if($i != 17 ){
                       $acumulativo .= ",";
                }else{
                     $valores_objeto_pecho = explode(",",$acumulativo);
                }
          }
      $acumulativo = "";
      }
      if ($mano_izq == $objetos_armadura[$a][0]){
         for($i=0;$i<=17;$i++){
                $acumulativo .=  $objetos_armadura[$a][$i];
                if($i != 17 ){
                       $acumulativo .= ",";
                }else{
                     $valores_objeto_mano_izq = explode(",",$acumulativo);
                }
          }
      $acumulativo = "";
      }
     $armadura_array_ordenado = array($valores_objeto_cabeza,$valores_objeto_pecho,$valores_objeto_mano_izq); //Aqui ya tengo los array con toda su informacion y lo que hago es introducirlos en el orden que quiero dentro de otro array para poder mantener todo el código que tenia de antes pero ahora todo ordenado.
 
}
echo $armadura_array_ordenado[2][1];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar