Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387

    Costruzione di array da simpleXML

    Buonasera a tutti,
    sto perdendo il sonno su un problema...
    Parto da un file XML del tipo seguente, generato via API dalla classe subito sotto:
    Codice PHP:
    <response status="success">
        <
    4137071924090694> (Customer unique internal "code")
        <
    earned>6021</earned>
        <
    redeemed>-6001</redeemed>
        <
    balance>20</balance>
        <
    balance_equivalent>0.02</balance_equivalent>
        <
    earned_equivalent>6.02</earned_equivalent>
        <
    redeemed_equivalent>-6</redeemed_equivalent>
        <
    first_name>Jane</first_name>
        <
    last_name>Doe</last_name>
        </
    4137071924090694>
        ...
        </
    response
    L'estratto della classe di nome "customerBalance" è il seguente:

    Codice PHP:
    foreach($result->customer as $customer) {
            
    $member_card[$i++] = array('customer_rank'=>$k++,
                                
    'card_number'=>$customer->card_number,
                                
    'customer_code'=>$customer->customer_code,
                                
    'customer_first_name'=>$customer->first_name,
                                
    'customer_last_name'=>$customer->last_name,
                                
    'customer_balance'=>$customer->balance);
        }
        return 
    $member_card
    mi servono solo pochi dati, rispetto a quelli restituiti dall'XML e dalla chiamata $result->customer as $customer, motivo per il quale mi costruisco e ritorno l'array $member_card.

    Nel file principale faccio un "classico"

    Codice PHP:
    foreach (customerBalance() as $key=>$valore) {
                                
    $rank $valore["customer_rank"];
                                
    $nome $valore["customer_first_name"];
                                
    $cognome $valore["customer_last_name"];
                                
    $card $valore["card_number"];
                                
    $saldo $valore["customer_balance"];
                                echo 
    "<tr>";
                                echo 
    "<td>".$rank."</td>";
                                echo 
    "<td>".$nome."</td>";
                                echo 
    "<td>".$cognome."</td>";
                                echo 
    "<td>".$card."</td>";
                                echo 
    "<td>".$saldo."</td>";
                                echo 
    "</tr>";
                            } 
    Fino a qui nulla di strano.

    Il problema è che l'array $member_card è un array "sporco", questo è quello che ottengo in output con un "pre":
    Codice PHP:
    Array
    (
        [
    0] => Array
            (
                [
    customer_rank] => 1
                
    [card_number] => SimpleXMLElement Object
                    
    (
                        [
    0] => 5771463452941190
                    
    )

                [
    customer_code] => SimpleXMLElement Object
                    
    (
                        [
    0] => 6086358390657090
                    
    )

                [
    customer_first_name] => SimpleXMLElement Object
                    
    (
                        [
    0] => Stefano
                    
    )

                [
    customer_last_name] => SimpleXMLElement Object
                    
    (
                        [
    0] => Palmisani
                    
    )

                [
    customer_balance] => SimpleXMLElement Object
                    
    (
                        [
    0] => 54654
                    
    )

            )

        [
    1] => Array
            (
                [
    customer_rank] => 2
                
    [card_number] => SimpleXMLElement Object
                    
    (
                        [
    0] => 8038157418941637
                    
    )

                [
    customer_code] => SimpleXMLElement Object
                    
    (
                        [
    0] => 1803733416109664
                    
    )

                [
    customer_first_name] => SimpleXMLElement Object
                    
    (
                        [
    0] => Emanuela
                    
    )

                [
    customer_last_name] => SimpleXMLElement Object
                    
    (
                        [
    0] => Ciuffri
                    
    )

                [
    customer_balance] => SimpleXMLElement Object
                    
    (
                        [
    0] => 564
                    
    )

            ) 
    Quei SimpleXMLElement mi creano grossi problemi nel caso successivamente debba ordinare, tagliare etc etc.

    Ho pensato di tagliare la testa al toro creandomi un secondo array in questa maniera:

    Codice PHP:
    foreach (customerBalance() as $key=>$valore) {
                                
    $rank $valore["customer_rank"];
                                
    $nome $valore["customer_first_name"];
                                
    $cognome $valore["customer_last_name"];
                                
    $card $valore["card_number"];
                                
    $saldo $valore["customer_balance"];
                                
    $nuovo = array(); // creo nuovo array
                                
    $nuovo[$i++]['nome'] = $nome
    Ma nel campo nome mi torna sempre quel SimpleXMLElement Object (so anche che non è il modo più corretto, dovrei ciclare nel caso ma questo lo vedrei poi)

    Quindi, ricapitolando, se faccio un echo di $nome vedo solo il nome appunto, se uso print_r e vedo effettivamente l'array ho di nuovo il SimpleXMLElement.

    Chiedo per favore un aiuto o un consiglio per far si ad arrivare ad avere un array semplicissimo fatto magari cosi

    Codice PHP:
    Array (
     [
    0]  => Array (
       [
    nome]=>mario
       
    [cognome]=>rossi
    )
     [
    1] => Array (
       [
    nome]=>giuseppe
    )

    Grazie in anticipo e spero di essere riuscito a spiegarmi

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Risolto...
    basta castare (string) su ogni elemento dell'array in fase di costruzione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.