Newsgroup: it.comp.www.php
Titolo: Array multidimensionale prendere valore

Array
(
    [ProductID] => 119
    [Capacity] => 0
    [product_data] => Array
        (
            [119] => Array
                (
                    [0] => Array
                        (
                            [realization_period] => N
                        )
 
                )
 
            [15] => Array
                (
                    [130] => Array
                        (
                            [options] => Array
                                (
                                    [18] => 1
                                    [23] => 15
                                )
 
                        )
 
                )
 
            [25] => Array
                (
                    [150] => Array
                        (
                            [options] => Array
                                (
                                    [23] => 15
                                )
 
                        )
 
                )
 
        )
 
   )
 
 
Scusate ma non riesco a prendere il valore di options:
$ProductID = $_POST['ProductID'];
$Capacity = $_POST['Capacity'];
$Option = $_POST['product_data'][$ProductID][$Capacity]['options'];
dove ho sbagliato?

dove ho sbagliato?
 
Se ProductId = 119 e Capacity = 0, dentro Option ti ritrovi
 
	Array( ['realization_period'] => 'N' );
 
...non 'options'. Gli altri array in quel punto hanno options, ma
il 119 lì ha realization_period.
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?



$Time0 = $_POST['product_data'][$ProductID][$Capacity]
['realization_period'];
con questa riga estraggo il valore di realization_period
 
devo ciclarlo in un foreach $Option = $_POST['product_data']
[$ProductID][$Capacity]['options']; ??

[$ProductID][$Capacity]['options']; ??
 
Non puoi.
 
Se una delle voci di quell'array NON contiene "options", anche
se piangi in greco tu da quella voce 'options' non lo leggi.
 
E nel prodotto 119, ti sembra che ci siano le options?
 
           [119] => Array
                (
                    [0] => Array
                        (
                            [realization_period] => N
                        )
 
                )
 
Come dicono a Napoli: è inutile aggiungere rhum: nu strunz non
adiventa babbà.
 
Quel che puoi fare e', boh?, usare delle options di default?
 
	$last = $_POST['product_data'][$ProductID][$Capacity];
	if (isset($last['options']))
		$options = $last['options'];
	else
		$options = array( '1' => '12345' );
 
oppure, nel ciclo, ignorare la voce se 'options' non c'e'.




Dunque provo a postare l'array completo e i dati che mi servono
 
Array
(
    [CompanyID] => 1
    [ProductID] => 119
    [prodotti] => Array
        (
            [0] => 15
            [1] => 25
        )
 
    [prodotto] => Array
        (
            [15] => Array
                (
                    [opzione] => Array
                        (
                            [0] => 22
                            [1] => 23
                            [23] => Array
                                (
                                    [opzioneextra] => Array
                                        (
                                            [0] => 23_15
                                        )
 
                                )
 
                            [24] => Array
                                (
                                    [opzioneextra] => Array
                                        (
                                            [0] => 24_15
                                        )
 
                                )
 
                        )
 
                )
 
            [25] => Array
                (
                    [opzione] => Array
                        (
                            [0] => 16
                            [1] => 17
                            [17] => Array
                                (
                                    [opzioneextra] => Array
                                        (
                                            [0] => 17_1
                                        )
 
                                )
 
                        )
 
                )
 
        )
 
)
 
Dove 15 o 25 è un ID prodotto
ad ogni valore di questi ID prodotto è legato l'array [opzione] cui a
sua volta a seconda del valore inviato puo avere un altro array
[opzioneextra]
 
il mio problema è che dovrei prendere i singoli valori legati al mio
ID prodotto
lo faccio con un foreach??
 
il primo foreach è facile
	$prodotti = $_POST['prodotti'];
 
	foreach ($prodotti as $key => $value) {
	  	echo "ID: $key Valore: $value <br />";
 
	}
 
ma per gli altri???
non riesco ad estrarre i valori [opzioni]
$opzioniProdotto = $_POST['prodotto'][$prodotti]['opzione'];
e naturalmente neppure i valore [opzioneextra]
$opzioniProdottoExtra = $_POST['prodotto'][$inputProdotto]['opzione']
[$opzioniProdotto]['opzioneextra']
 
help........

                )
 
	Quindi:
 
		$datiProdotto = $datiProd[$key];
 
	E qui troverai definito $datiProdotto['opzione']
 
		if (!isset($datiProdotto['opzione']))
			die("ACH - 1");
 
		$opzione = $datiProdotto['opzione'];
 
	Dentro $opzione troverai un tot di valori, o scalari oppure
	array. Non so cosa indichino i due casi.
 
		foreach($opzione as $key2 => $valore)
		{
			if (is_array($valore))
			{
				if (isset($valore['opzioneextra']))
				{
					print "OpzioneExtra = ...";
					print "<br />";
				}
			}
			else
			{
				print "$key2 = $valore<br />";
			}
 
 
In futuro, quando ti trovi in una situazione cosi', stampa i valori
intermedi del tuo array:
 
 
	foreach(array1 as $chiave1 => $valore1)
	{
		print_r($valore1);
 
	}
 
e cosi' vedrai come andare avanti.




C'è qualcosa che non mi torna
 
	$prodotti = $_POST['prodotti'];
 
	// Aggiungiamo:
	$datiProd = $_POST['prodotto'];
 
	foreach ($prodotti as $key => $v1) {
	  	echo "ID: $key Valore: $v1 <br />";
 
		$datiProdotto = $datiProd[$key];
 
		if (!isset($datiProdotto['opzione']))
			die("ACH - 1");
 
		$opzione = $datiProdotto['opzione'];
 
 
		foreach($datiProd as $key2 => $valore)	{
			if (is_array($valore))	{
				if (isset($valore['opzioneextra'])) {
						print "OpzioneExtra = ...";
						print "<br />";
				}
			} else {
				print "$key2 = $valore<br />";
			}
		}
 
	}
 
questo è il risultato:
ID: 0 Valore: 15
ACH - 1
 
Mi si ferma sempre al
if (!isset($datiProdotto['opzione']))
			die("ACH - 1");
cui se lo commento non mi da i valori comunque
 

cui se lo commento non mi da i valori comunque
 
E' normale: anche rompere il termometro raramente abbassa la febbre :-)
 
Abbi pazienza, ma stai affrontando la cosa con il metodo dell'"apprendista
stregone": prendi un incantesimo complicato, sostituisci qualche parola, e
guardi cosa succede.
 
E' un approccio molto comune fra chi e' alle prime armi (lo so bene io) ma
e' un approccio che in realta' rallenta tantissimo, e fa prendere un pacco
di pessime abitudini. Io a liberarmene c'ho messo qualche anno e non mi ci
sono divertito neanche un po', e mi c'e' voluto comunque l'aiuto del guru.
 
Ti suggerisco o l'approccio dello studente (prendi un libro sul PHP, anche
se le prime cose che ci troverai ti sembreranno quasi infantili, confronto
a quelle che hai per le mani ora!) o quello dell'artigiano (inizi con cose
molto, molto piu' semplici -- per esempio lascia stare gli array annidati,
per adesso).
 
Come si dice dalle mie parti, "da' retta a un bischero" :-D
 
Leonardo che oggi predica bene, ma sapessi quanto ho razzolato male




Vediamo di riuscire risolvere la questione
non ne vengo fuori
 
$prodotti = $_POST['prodotti'];
 
 
Con questo foreach gli do in pasto il mio ID prodotto
e mi estrae i valori 15 e 25
foreach ($prodotti as $key => $v1) {
   echo "ID: $key Valore: $v1 <br />";
 
incapsulo i dati in un array  $datiProd[$key]
 
Dopodiche devo dirgli
cicla l'array $_POST[opzione]
 
foreach ($datiProd as $key2 => $v2) {
	  	echo "ID: $key2 Valore: $v2 <br />";
 
Se il valore $key2 = $key dammi il dato
 
 
dove ho sbagliato da sto ragionamento se si puo chiamare tale?
 
 



Forse ce so riuscito ma volevo conferma
ho modificato i dati che mi servono semplificandoli
[prodotto] => Array
        (
            [15] => Array
                (
                    [0] => 22
                    [1] => 23_15
                    [2] => 24_30
                )
 
            [25] => Array
                (
                    [0] => 16
                    [1] => 17_1
                    [2] => 22
                )
 
        )
ho creato questo:
 
	foreach ($datiProd as $key => $v1) {
	  	echo "ID: $key Valore: $v1 <br />";
		foreach ($v1 as $key2 => $v2) {
	  	echo "ID: $key2 Valore: $v2 <br />";
		}
 
 
	}
 
Risultato:
ID: 15 Valore: Array
ID: 0 Valore: 22
ID: 1 Valore: 23_15
ID: 2 Valore: 24_30
 
ID: 25 Valore: Array
ID: 0 Valore: 16
ID: 1 Valore: 17_1
ID: 2 Valore: 22
 
Mi pare corretto
che ne dici?
 
 

che ne dici?
 
Direi di si'. Ora ti manca di quotare per benino e poi la Forza scorre
potente in te :-D
 
Leonardo
