Foros del Web » Programando para Internet » PHP »

Array asociativo con un "1" como string en un índice

Estas en el tema de Array asociativo con un "1" como string en un índice en el foro de PHP en Foros del Web. Hola, A través de SOAP recupero un array pero viene con un índice que le llama "1" pero es string. El manual de PHP dice ...
  #1 (permalink)  
Antiguo 20/05/2010, 05:23
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Array asociativo con un "1" como string en un índice

Hola,

A través de SOAP recupero un array pero viene con un índice que le llama "1" pero es string.

El manual de PHP dice:

"Un key puede ser un integer o bien un string . Si una clave es la representación estándar de un integer , será interpretada como tal (es decir, "8" será interpretado como 8, mientras que "08" será interpretado como "08"). Los valores float en key serán truncados a valores tipo integer . Los tipos de arrays indexados y asociativos son el mismo tipo en PHP, el cual pueden contener índices tipo integer o string."

Si hago un var_dump, me muestra:
Código PHP:
Array
(
     [
recsonpage] => 1
     
[recsindb] => 1
     
[1] => Array
                (
                     [
thawtecertstat] => NA
                     
[websiteid] => 17187602
                     
[domainstat] => Processing
                
)

Haciendo un gettype de los indices y valores:

Indice: recsonpage, Tipo: string, Valor: string
Indice: recsindb, Tipo: string, Valor: string
Indice: 1, Tipo: string, Valor: array


Al querer acceder de esta manera.

Código PHP:
$array_devuelto["1"]["domainstat"
Me dice que no hay nada. Normal.

Hay alguna manera de pasar ese "1" a int o de obligarle a que el "1" al que hago referencia lo trate como string?
  #2 (permalink)  
Antiguo 20/05/2010, 07:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Array asociativo con un "1" como string en un índice

Yo trate esto y funcionó
Código PHP:
Ver original
  1. <?php
  2. $a = array(
  3.     'recsonpage' => '1',
  4.      'recsindb' => '1',
  5.      '1' => array
  6.                (
  7.                      'thawtecertstat' => 'NA',
  8.                      'websiteid' => '17187602',
  9.                      'domainstat' => 'Processing'
  10.                 )
  11. );
  12. echo $a['1']['websiteid'];
y también de esta forma y funcionó
Código PHP:
Ver original
  1. <?php
  2. echo $a[1]['websiteid'];
__________________
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/05/2010, 07:11
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Respuesta: Array asociativo con un "1" como string en un índice

Cita:
Iniciado por abimaelrc Ver Mensaje
Yo trate esto y funcionó
Código PHP:
Ver original
  1. <?php
  2. $a = array(
  3.     'recsonpage' => '1',
  4.      'recsindb' => '1',
  5.      '1' => array
  6.                (
  7.                      'thawtecertstat' => 'NA',
  8.                      'websiteid' => '17187602',
  9.                      'domainstat' => 'Processing'
  10.                 )
  11. );
  12. echo $a['1']['websiteid'];
y también de esta forma y funcionó
Código PHP:
Ver original
  1. <?php
  2. echo $a[1]['websiteid'];
Si declaras el array a "mano" funciona OK. Porque el indice '1' lo guarda como integer. Pero yo recibo el array con el '1' como string (no se por qué) pero como string no funciona.
  #4 (permalink)  
Antiguo 20/05/2010, 07:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Array asociativo con un "1" como string en un índice

Los indices numéricos tratalos como tales. En vez de indicar $a['1'] hazlo $a[1].
__________________
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/05/2010, 07:18
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Respuesta: Array asociativo con un "1" como string en un índice

Cita:
Iniciado por abimaelrc Ver Mensaje
Los indices numéricos tratalos como tales. En vez de indicar $a['1'] hazlo $a[1].
Pero es que no es un indice numérico, es un índice tipo string y que su string es un número.

Ya lo he dicho antes. Haciendo un gettype de los indices y valores me da:
"Indice: 1, Tipo: string, Valor: array"

Es un caso bastante raro.

Si declaras el array a "mano" y haces gettype, dice que un integer. No se por qué SOAP lo devuelve así.......

Última edición por cluster28; 20/05/2010 a las 07:19 Razón: Añadir más información
  #6 (permalink)  
Antiguo 20/05/2010, 09:09
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Respuesta: Array asociativo con un "1" como string en un índice

Mirando y mirando por internet, veo que no hay solución. Lo que no se es por qué SOAP lo envía así

Como haciendo un foreach sí que muestra bien los resultados, la solución que tomaré será crear un nuevo array para que el indice "1" lo guarde como integer. Para quién le interese. Aunque no es nada de otro mundo.

Código PHP:
foreach ($array as $clave=>$valor)
{
    
$array_nuevo[$clave]=$valor;
    if(
is_array($valor))
    {
        foreach (
$valor as $clave2=>$valor2)
        {
           
$array_resultado[$clave][$clave2]=$valor2;
        }
    }

El problema es que si no tenéis el array devuelto por SOAP no podéis hacer pruebas.

Gracias de todos modos.

Si alguien sabe resolver lo de SOAP que me diga,

Etiquetas: string
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 03:25.