Array() e Array() multidimensionali

di il
7 risposte

Array() e Array() multidimensionali

Salve a tutti...
Gli array per me sono sempre stati un argomento molto ostico e, anche quando studiavo il c ho fatto fatica, anche se ci ho messo del tempo li ho capiti. Forse. Adesso mi trovo a voler stampare un array multidimensionale ma non ci ho capito molto. Mi spiegho.
Avendo questo codice che per esempio mi dovrebbe stampare un form:

$a_array = array('id'=>array('email','pass','hidden'), //Volendo aggiungere anche altro.
	     'type'=>array('email','password','hidden'));
Come faccio a stampare il contenuto dell'array??
ho provato:

foreach($a_array as $a => $b)
{
	echo $a.$b;
}//questo ciclo mi da errore: Parse error: syntax error, unexpected 'foreach' (T_FOREACH) on line 4
Mi chiedo; Ma che significa? E... Ma si può fare una cosa del genere? Se si... Cosa sbaglio? O sbaglio qualcosa nel creare l'array??

Spero di essere stato chiareo e immagino che sia una cosa banale e magari la soluzione è davanti ai miei occhi... ma non la trovo. Ci sto perdendo le notti e chiedo scusa se magari è fin troppo banale ma sono newbie.
Grazie se vorrete aiutarmi.

L'errore è cambiato: Notice: Array to string conversion in on line 6
idArray
Notice: Array to string conversion in on line 6
typeArray

7 Risposte

  • Re: Array() e Array() multidimensionali

    Ciao treccina,

    l'errore è esattamente quello che ti viene notificato, ossia stai cercando di stampare un array facendolo passare come stringa alla echo.
    Ora non vorrei dirti esattamente subito qual è l'errore ma cerco di fartici arrivare, se non ti spiace:
    foreach($a_array as $a => $b)
    {
       echo $a.$b;
    }
    Cosa fa questo codice?
    Per ogni elemento dell'array $a_array, del tipo $a => $b (ossia $a è la chiave e $b è il valore da essa puntato), fa quello che c'è tra le graffe, in particolare in questo caso cerca di fare una echo di $a.$b.

    Ma... Se $a assume i valori 'id' e 'type', $b che valori assume? Pensaci!
  • Re: Array() e Array() multidimensionali

    Bho... non mi torna. Non il tuo esempio sia chiaro.
    $b dovrebbe assumere i valori contenuti nell'array, ovviamente, me li ritorna... ma doppi. es. mi restituisce 6 elementi input.

    Quando ho scritto il post ho sbagliato credo. Ho dimenticato un foreach per iterare l'array. A meno che non stia sbagliando proprio questo:
    
    foreach($a_array as $a => $b)
    {
    	foreach($b as $c => $d)
    	{
    		echo '<input '.$a.'="'.$d.'"><br />'."\n\r";
    	}
    }
    
    Il risultato:
    
    <input id="email"><br />
    <input id="pass"><br />
    <input id="hidden"><br />
    <input type="email"><br />
    <input type="password"><br />
    <input type="hidden"><br />
    
    Io vorrei fare una cosa del genere:
    
    <input id="email" type="email">
    
    In modo che se devo inserire un nuovo input mi limito ad inserirlo nel array. Spero di essere stato chiaro.

    Innanzitutto grazie per il tuo aiuto e non mi spiace assolutamente anzi... Scusa se rispondo solo adesso ma ho avuto delle cose da fare e mi sono messo a studiare un framework php (laravel).
    Non lo so... Gli array non riesco a digerirli, quanto è vero che mi sono sempre limitato a farli monodimensionali. Per piccole cose in sostanza.
    Ho letto un sacco su sti array e sembra la cosa più facile del mondo... Pensa che anche quando studiavo il c ho fatto una fatica enorme e li ho rimossi automaticamente. Forse sono io tonto? E se sbaglio proprio l'impostazione dell'array??
    grazie comunque...
  • Re: Array() e Array() multidimensionali

    Allora non avevo capito cosa volevi fare, chiedo scusa. Ti faccio vedere come sono riuscito a farlo funzionare

    Sono sicuro che ci sia sicuramente un modo migliore per farlo (non sono questo gran esperto di php), ma io ho risolto in questo modo:
    $arkeys = array_keys($a_array);
    foreach($a_array as $a=>$b) {
        foreach($b as $c) {
            echo "<input ";
            for($i=0;$i<count($arkeys);$i++)
                echo "$arkeys[$i]". '='."\"$c\" ";
            echo "/>";
        }
    }
    Ho usato la funzione array_keys che prende in input un array e restituisce le sue chiavi.
    Nel mentre penso a un modo meno brutto per fare quel che ti serve, o magari arriva qualcuno che ne sa più di me (non che ci voglia molto, sono davvero poco esperto). Fammi sapere se ti serve qualcos'altro, nel caso mi viene in mente un modo migliore per farlo modifico questo commento o ne posto uno nuovo
  • Re: Array() e Array() multidimensionali

    Allora non avevo capito cosa volevi fare, chiedo scusa.
    Ma figurati anzi grazie!

    Il tuo esempio mi crea sempre 6 input. Pensandoci e modificando il tuo codice;
    In questo modo funziona solo per l'id ovviamente.
    
    <?php
    $a_array = array
    		   (
    				'id'=>array('email','pass','hidden')//,
    				//'type'=>array('email','password','hidden')
    		   );
    //print_r($a_array);
    $b_array = array_keys($a_array);
    //print_r($b_array);
    foreach($b_array as $b=>$c)
    {
    	foreach($a_array as $a=>$e)
    	{
    		foreach($e as $d=>$f)
    		{
    			echo '<input '.$c.'="'.$f.'">'."\n\r";
    		}
    	}
    }
    ?>
    
    Come output:
    
    <input id="email">
    <input id="pass">
    <input id="hidden">
    
    Come inserisco il resto dell'array (type) va in palla!
    Sto sbagliando qualcosa ma non reisco a capirlo...
  • Re: Array() e Array() multidimensionali

    Prova così:
    $conta=count($a_array['id']);
    for($i=0;$i<$conta;$i++) {
        echo "<input ";
        foreach ($a_array as $a => $b) {
            echo "$a=\"$b[$i]\" ";
        }
        echo " />";
    }
    
    Dovrebbe funzionare, anche se ti ripeto, sono sicuro che ci siano soluzioni migliori ma ora ho troppo poco tempo per pensarci, per quanto stupida la questione possa sembrare ai molto esperti
  • Re: Array() e Array() multidimensionali

    Ciao Elvashak,
    Ho trovato una soluzione... e dire che avevo già strutturato tempo fa un array del genere...
    Forse non è una soluzione ottimale ma è funzionante. Certo mi sarebbe piaciuto capire se era possibile farlo in quel modo anche se nutro forti dubbi. Anche se, seguendo la logica degli array, il funzionamento era corretto. Cosa ne pensi/pensate?

    la mia soluzione, sperando che si capisca:
    $a_array = array('email'=>array( 'id'=>'email','name'=>'email','type'=>'email','class'=>'inputs required'),
    		          'password'=>array('id'=>'pass','name'=>'pass','type'=>'password'));
    Correggimi se sbaglio ma credo che fosse proprio l'impostazione dell'array sbagliata.
    foreach($a_array as $a => $b)
    {
    	echo '<input ';
    	foreach($b as $c =>$d)
    	{
    		echo ' '.$c.'="'.$d.'"';
    	}
    	echo ' >'."\n\r";
    }
    In output mi da quello che voglio:
    <input  id="email" name="email" type="email" class="inputs required">
    <input  id="pass" name="pass" type="password">
    Resto in attesa e grazie ancora.
  • Re: Array() e Array() multidimensionali

    Ciao Elvashak,
    Involontariamente ho saltato il tuo ultimo post, credevo di averlo già letto... chiedo venia.

    Funziona.
Devi accedere o registrarti per scrivere nel forum
7 risposte