Ci mancava l'array multidimensionale

Monital

Utente Attivo
15 Apr 2009
778
2
18
Mai na volta che risolvo di mio na cosa troppo difficile.

ho un array restituito d aun altro codice

$arrayprova

in questo sono presenti delle variabili derivanti da una casella di testo ciclata, senza tirarle per le lunghe, io devo riprendere tutti i valori dell'0array sommare quelle uguali etc.
senza tirarle epr le lunghe e speigare vcome ci arrivo blabla speigo cosa vorrei fare con un esempio

$arrayprova contiene quest'array

Array ( [0] =>Antonio ) Array ( [1] =>Antonio ) Array ( [2] => Giuseppe) Array ( [3] => Francesco) Array ( 4] => Giuseppe)

suppongo sia un array multidimensionale

ora io devo cercare le parole uguali e sommarle tipo deve uscirmi Atnonio(2),Giuseppe(2),Francesco.

quindi dovrei usare array_unique e count o sizeof() il problema e che come la giro e la volta mi viene restituito sempre 1 perchè conta i singoli array e non sono stato capace di dividerli.

in più array porobva devo unirloa d unaltra stringa

sonoc irca 4 ore che ci sono su ma non ne ho cavato un ragno dal buco.

anche con il foreach la sostanza non cambia
dopo il foreac il print_r mi restituisce i nomi
PHP:
Antonio Antonio Giuseppe Francesco Giuseppe

ma nonr iescoa farci neinte nè il count che mi restituisce sempre 1 1 1 1 1 e di conseguenza nient'altro

come risolvo?
thank
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
probabilmente ti conviene usare foreach annidati

PHP:
<?php
//......
foreach($array as $chiave =>valore){
	if(is_array($chiave){
		foreach($chiave as $valore_2){
			//....
		}
	}else{
		//.....
	}
}
//....
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
probabilmente ti conviene usare foreach annidati

PHP:
<?php
//......
foreach($array as $chiave =>valore){
	if(is_array($chiave){
		foreach($chiave as $valore_2){
			//....
		}
	}else{
		//.....
	}
}
//....
?>

non va borgo ti posto il codice

PHP:
for($i=0;$i<$rc;$i++){

$marcacasa = array($i=>$_POST['marcacasa'.$i]);//qua recupero le variabili derivanti da una casella di testo inserita in un ciclo

if(!empty($_POST['marcacasa'.$i])){


foreach($marcacasa as $key => $id) 
{ 
$datacasa=$marcacasa[$key];
if(is_array($datacasa)){ ////inseerimento tuo suggerimento
foreach($datacasa as $valore_2){ //inserimento tuo suggerimento
echo $valore_2;
$stringacasa= implode(",",$valore_2);
if($rc!=0){
///altra azione.....
}
}
}
}
}

senza l'inserimento del tuo consiglio mi lista come descritto nel primo post
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusa ma non capisco bene cosa stai cercando di fare, per caso hai chiamato le caselle di testo nel ciclo
name="marcacasa0", name="marcacasa1", name="marcacasa2"........ ? cioè concatenando marcacasa con l'indice del ciclo?
se è così avresti fatto meglio a chiamarle tutte

name="marcacasa[]"
poi nel php
$marcacasa=$_POST['marcacasa'];
per cui in
$marcacasa[0] => il valore che hai inserito nella prima casella di testo
$marcacasa[2] => il valore che hai inserito nella seconda casella di testo
$marcacasa[3] => il valore che hai inserito nella terza casella di testo
.......
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
scusa ma non capisco bene cosa stai cercando di fare, per caso hai chiamato le caselle di testo nel ciclo
name="marcacasa0", name="marcacasa1", name="marcacasa2"........ ? cioè concatenando marcacasa con l'indice del ciclo?
se è così avresti fatto meglio a chiamarle tutte

name="marcacasa[]"
poi nel php
$marcacasa=$_POST['marcacasa'];
per cui in
$marcacasa[0] => il valore che hai inserito nella prima casella di testo
$marcacasa[2] => il valore che hai inserito nella seconda casella di testo
$marcacasa[3] => il valore che hai inserito nella terza casella di testo
.......

questo è il codice che mi invia la variabile marcacasa ciclata

PHP:
<?php if(!empty($rc)){
echo "<form>";
for($i=0;$i<$rc;$i++){
echo "<INPUT TYPE=\"text\" width=\"150\" class=\"inputtext\" id=\"input$i\" name=\"marcacasa$i\"   
VALUE=\"\" ONKEYUP=\"autoComplete(this,this.form.options,'value',true)\">";
echo "<SELECT NAME=\"options\"  class=\"lmo-formular-input\" onChange=\"this.form.input$i.value=this.options[this.selectedIndex].value\">
<option value=\"\">Nome</option>";
$sql="SELECT Nome FROM tabella WHERE citta ='$citta'  ORDER by Nome";
$result = mysql_query($sql);
$number = mysql_numrows($result);
$z = 0;
while ($number > $z) {
$thename = mysql_result($result,$z,"Nome");
$thename=str_replace("_"," ",$thename);
echo  "<option value=\"$thename\">$thename</option>";
$z++;
}
echo "</SELECT><br>"; 
}
echo "</td>"; 
}
}
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho fatto questa prova
ho tolto la parte della <select> perche non ho il db e aggiunto il pulsante di submit per verificare l'invio

PHP:
<?php
if(isset($_POST['invia'])){
	$prova=$_POST['marcacasa'];
	echo "<br>";
	var_dump($prova);
	echo "<br>";
}
$rc=3;
if(!empty($rc)){ 
echo "<form method=\"post\">"; 
	for($i=0;$i<$rc;$i++){ 
		echo "<INPUT TYPE=\"text\" width=\"150\" class=\"inputtext\" id=\"input$i\" name=\"marcacasa[]\" VALUE=\"\" ONKEYUP=\"autoComplete(this,this.form.options,'value',true)\">"; 
		/*
		echo "<SELECT NAME=\"options\"  class=\"lmo-formular-input\" onChange=\"this.form.input$i.value=this.options[this.selectedIndex].value\"> 
		<option value=\"\">Nome</option>"; 
		$sql="SELECT Nome FROM tabella WHERE citta ='$citta'  ORDER by Nome"; 
		$result = mysql_query($sql); 
		$number = mysql_numrows($result); 
		$z = 0; 
		while ($number > $z) { 
			$thename = mysql_result($result,$z,"Nome"); 
			$thename=str_replace("_"," ",$thename); 
			echo  "<option value=\"$thename\">$thename</option>"; 
			$z++; 
		} 
		echo "</SELECT><br>";
		*/ 
	} 
	//echo "</td>";
	echo "<p><input name=\"invia\" type=\"submit\"></p>";
	echo "</form>";
} 
?>
e questo è l'output del var_dump (nei campi avevo scritto aa, bb, cc)
array(3) { [0]=> string(2) "aa" [1]=> string(2) "bb" [2]=> string(2) "cc" }
come vedi mettendo name=\"marcacasa[]\" ti semplifichi la vita
analogo discorso ti conviene per la <select> mettendo eventualmente NAME=\"options[]\" perche da quanto mi sempra se hai tre campi di txt hai anche tre campi di select (è dentro il ciclo for)
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
ho fatto questa prova
ho tolto la parte della <select> perche non ho il db e aggiunto il pulsante di submit per verificare l'invio

PHP:
<?php
if(isset($_POST['invia'])){
	$prova=$_POST['marcacasa'];
	echo "<br>";
	var_dump($prova);
	echo "<br>";
}
$rc=3;
if(!empty($rc)){ 
echo "<form method=\"post\">"; 
	for($i=0;$i<$rc;$i++){ 
		echo "<INPUT TYPE=\"text\" width=\"150\" class=\"inputtext\" id=\"input$i\" name=\"marcacasa[]\" VALUE=\"\" ONKEYUP=\"autoComplete(this,this.form.options,'value',true)\">"; 
		/*
		echo "<SELECT NAME=\"options\"  class=\"lmo-formular-input\" onChange=\"this.form.input$i.value=this.options[this.selectedIndex].value\"> 
		<option value=\"\">Nome</option>"; 
		$sql="SELECT Nome FROM tabella WHERE citta ='$citta'  ORDER by Nome"; 
		$result = mysql_query($sql); 
		$number = mysql_numrows($result); 
		$z = 0; 
		while ($number > $z) { 
			$thename = mysql_result($result,$z,"Nome"); 
			$thename=str_replace("_"," ",$thename); 
			echo  "<option value=\"$thename\">$thename</option>"; 
			$z++; 
		} 
		echo "</SELECT><br>";
		*/ 
	} 
	//echo "</td>";
	echo "<p><input name=\"invia\" type=\"submit\"></p>";
	echo "</form>";
} 
?>
e questo è l'output del var_dump (nei campi avevo scritto aa, bb, cc)
come vedi mettendo name=\"marcacasa[]\" ti semplifichi la vita
analogo discorso ti conviene per la <select> mettendo eventualmente NAME=\"options[]\" perche da quanto mi sempra se hai tre campi di txt hai anche tre campi di select (è dentro il ciclo for)


ma il name della selcet la chiamo semplicemente marcacasa[] oppure dato che come pensi ho la select in un ciclo for devo mettere marcacasa[$i]?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
puoi mettere indifferentemente
name=\"marcacasa[]\"
o
name=\"marcacasa[$i]\"

però per la <select> vedo che la chiami options "<SELECT NAME=\"options\" ...>

non puoi chiamare due campi di input con lo stesso nome
come per il campo di text o la chiami
"<SELECT NAME=\"options[]\" ...>
oppure se vuoi
"<SELECT NAME=\"options[$i]\" ...>
poi nel php
$marcacasa=$_POST['marcacasa'];
$opzioni=$_POST['opzioni'];

in entrambe le variabili $marcasa e $opzioni ti ritrovi l'array
$marcacasa[0], $marcacasa[1], $marcacasa[2].......
$opzioni[0], $opzioni[1], $opzioni[2].......
quante in funzione di $rc

dimenticavo:quando metti [] si autoincrementa
 
Ultima modifica:

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
puoi mettere indifferentemente
name=\"marcacasa[]\"
o
name=\"marcacasa[$i]\"

però per la <select> vedo che la chiami options "<SELECT NAME=\"options\" ...>

non puoi chiamare due campi di input con lo stesso nome
come per il campo di text o la chiami
"<SELECT NAME=\"options[]\" ...>
oppure se vuoi
"<SELECT NAME=\"options[$i]\" ...>
poi nel php
$marcacasa=$_POST['marcacasa'];
$opzioni=$_POST['opzioni'];

in entrambe le variabili $marcasa e $opzioni ti ritrovi l'array
$marcacasa[0], $marcacasa[1], $marcacasa[2].......
$opzioni[0], $opzioni[1], $opzioni[2].......
quante in funzione di $rc

dimenticavo:quando metti [] si autoincrementa

forse per questo me lo ha fatto diventare un multi, evidentemente ha assegnato un array per ogni select. che stupido . se rieco dopo, cui provo e ti faccio sapere sennò a domani. grazie

sono sempre ind ebito
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per terminare la prova ho simulato il db con l'array $op in modo da riempire le <select> a cui ho dato name=options[]
entrambi i var_dump restituiscono un array monodimensionale
PHP:
<?php
$op=array('Roma','Ascoli_Piceno','Parma','Padova','Bolzano','Palermo');//per simulare il db
if(isset($_POST['invia'])){
	$prova=$_POST['marcacasa'];
	$opzioni=$_POST['options'];//messo per verifica poi lo togli
	echo "<br>";
	var_dump($prova);
	echo "<br>";
	var_dump($opzioni);//messo per verifica
	echo "<br>";
}
$rc=4;
if(!empty($rc)){ 
echo "<form method=\"post\">"; 
	for($i=0;$i<$rc;$i++){ 
		echo "<INPUT TYPE=\"text\" width=\"150\" class=\"inputtext\" id=\"input$i\" name=\"marcacasa[]\" VALUE=\"\" ONKEYUP=\"autoComplete(this,this.form.options,'value',true)\">"; 
		echo "<SELECT NAME=\"options[]\"  class=\"lmo-formular-input\" onChange=\"this.form.input$i.value=this.options[this.selectedIndex].value\"> 
		<option value=\"\">Nome</option>"; 
		//$sql="SELECT Nome FROM tabella WHERE citta ='$citta'  ORDER by Nome"; 
		//$result = mysql_query($sql); 
		//$number = mysql_num_rows($result); 
		//$z = 0; 
		//while ($number > $z) {
		foreach($op as $thename){
			//$thename = mysql_result($result,$z,"Nome"); 
			$thename=str_replace("_"," ",$thename); 
			echo  "<option value=\"$thename\">$thename</option>"; 
			//$z++; 
		} 
		echo "</SELECT><br>";
	} 
	//echo "</td>";
	echo "<p><input name=\"invia\" type=\"submit\"></p>";
	echo "</form>";
} 
?>
due piccole cose:
1. il campo di input text ti serve solo per visualizzare cosa hai selezionato o anche per immettere un valore se non selezioni niente?
se noti scrivendo pinco in txt e non selezionando la corrispondente options in uno dei valori di $marcacasa troverai pinco
se ti serve solo per visualizzare la selezione ti converrebbe mettere nel campo txt la clausola readonly="readonly"
2. perche per estrarre i valori dal db fai quell'ambaradan? non ti converre fare:
PHP:
<?php
//....
while($riga=mysql_fetch_array($result)){//o mysql_fetch_assoc
	$thename=str_replace("_"," ",$riga['Nome']);
	echo  "<option value=\"$thename\">$thename</option>"; 
}
//....
?>
e questo è l'uotput
array(4) { [0]=> string(4) "Roma" [1]=> string(5) "pinco" [2]=> string(6) "Padova" [3]=> string(7) "Palermo" }
array(4) { [0]=> string(4) "Roma" [1]=> string(0) "" [2]=> string(6) "Padova" [3]=> string(7) "Palermo" }
nelle seconde caselle di text e select in text ho messo pinco e non ho selezionato, come puoi vedere in
$marcacasa[1] trovo il valore pinco mentre nel corrispundente
$opzioni[1] trovo stringa vuota
negli altri i valori coincidono
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
grande borgo funge tutto inmaniera perfetta, sei grande

grazie

due piccole cose:
1. il campo di input text ti serve solo per visualizzare cosa hai selezionato o anche per immettere un valore se non selezioni niente?
se noti scrivendo pinco in txt e non selezionando la corrispondente options in uno dei valori di $marcacasa troverai pinco
se ti serve solo per visualizzare la selezione ti converrebbe mettere nel campo txt la clausola readonly="readonly"
2. perche per estrarre i valori dal db fai quell'ambaradan? non ti converre fare:

1. non cia vevo pensato, non devo eprmettere di asscrivere niente, grazie della precisazione, molto utile il readonly non lo conoscevo

2. utile anche questa chicca.

Thank
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ho un problema al seguire dellos cript

nella pagina successiva al form recupero la variabile con $marcacasa=$_POST['marcarcasa'];

e fin qui tutto ok nella pagina

però avrei la necessità di inviare l'array in un altra pagina e lo faccio con un form nascosto
PHP:
echo "<form action=\"pagina2.php\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"marcacasa\" value=\"$marcacasa\">\n";

però nella pagina 2 non riesco a richiamarla con $marcacasa=$_POST['marcacasa'] anche pasandola al foreach

mi resitutisce

array([0]=>Array)

stoa ndando enl pallone
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ti conviene usare le sessioni
ti metto l'esempio con due pagine (le ho chiamate multi_form.php e multi_form_2.php)
come vedi nella seconda leggo bene l'array
la prima uguale a quella che ti avevo postato (con in piu la sessione e l'invio alla seconda)
PHP:
<?php
session_start();
$op=array('Roma','Ascoli_Piceno','Parma','Padova','Bolzano','Palermo');//per simulare il db
if(isset($_POST['invia'])){
	$prova=$_POST['marcacasa'];
	$_SESSION['marc']=$prova;
	$opzioni=$_POST['options'];//messo per verifica poi lo togli
	echo "<br>";
	var_dump($prova);
	echo "<br>";
	var_dump($opzioni);//messo per verifica
	echo "<br>";
	echo "<a href=\"multi_form_2.php\">vai</a>";
}
$rc=4;
if(!empty($rc)){ 
echo "<form method=\"post\">"; 
	for($i=0;$i<$rc;$i++){ 
		echo "<INPUT TYPE=\"text\" width=\"150\" class=\"inputtext\" id=\"input$i\" name=\"marcacasa[]\" VALUE=\"\" ONKEYUP=\"autoComplete(this,this.form.options,'value',true)\">"; 
		echo "<SELECT NAME=\"options[]\"  class=\"lmo-formular-input\" onChange=\"this.form.input$i.value=this.options[this.selectedIndex].value\"> 
		<option value=\"\">Nome</option>"; 
		foreach($op as $thename){
			$thename=str_replace("_"," ",$thename); 
			echo  "<option value=\"$thename\">$thename</option>"; 
		} 
		echo "</SELECT><br>";
	} 
	echo "<p><input name=\"invia\" type=\"submit\"></p>";
	echo "</form>";
} 
?>
la seconda mostra la sessione trasmessa
PHP:
<?php
session_start();
var_dump($_SESSION['marc']);
?>
<a href="multi_form.php">torna</a>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ma la sessione(materia non ancora afforntata) posso usarla solo su queste ultime tre pagine di script?

o devo reinerirle dall'inizio?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
le sessioni puoi usarle dove vuoi.
l'importante è che le pagine in cui le usi (in scrittura e/o lettura) inizino con l'istruzione
session_start();
l'istruzione DEVE essere la prima, prima di qualsiasi uot html
es.
PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--eccetera html e/o php -->
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
stavo scrivendo che non ci riuscivo quando ..................

ci sono risucito...

grande grande

thank you
 
Discussioni simili
Autore Titolo Forum Risposte Data
otto9due Leggere valore da array multidimensionale a chiavi dinamiche PHP 1
M Passaggio variabili array php su un tasto jq PHP 3
M Somma inversa di Array C/C++ 2
MarcoGrazia Iterazione array PHP 5
N Passare array da php a javascript PHP 5
G Ordinare un array multidimensionale PHP 4
H Errore su array associativo PHP 1
K Array senza ripetizioni Presentati al Forum 4
A Gestione array multidimensionale PHP 6
otto9due Più chiavi in array con array_key_exists() PHP 0
M Array associativi php su 2 campi mysql PHP 10
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L Sessione e array per utenti PHP 0
R Importazione csv su mysql tramite array PHP 2
elpirata Ricavare e stampare indirizzo ip da array associativo PHP 0
P Ciclare tra array di oggetti PHP 1
R Raggruppare valori array PHP 5
S Come conoscere la posizione di numeri in un array escludendo i doppioni PHP 4
D Popolare array PHP 8
R Includere elementi array fra apici PHP 1
P Array da foreach PHP 2
N Variabile di sessione è un array PHP7 PHP 3
R Scorporare array e recuperare record tabella PHP 10
A Contare gli elementi di un array PHP 13
A Importare array in mysql PHP 1
A Array di immagini Sviluppo app per Android 10
D Chiave unica in estrazione dati da array php PHP 0
D Spazio vuoto in un elemento di un array php PHP 2
S Come filtrare valori di un array PHP 4
mazman mysqli_query() mi ritorna un array vuoto anche se presente un record nella tabella PHP 13
A Non è un array e nemmeno un intero, che tipo di dato è? Javascript 1
max1974 PHP, Array Multidimensionale e Grafici PHP 22
S [PHP] Confrontare due array con valori quasi uguali PHP 2
MarcoGrazia [PHP] Unioni di due array con somma di valori PHP 6
R [PHP] Visualizzazione dati Array PHP 2
S [PHP] Eliminare doppioni array e rinumerare le posizioni PHP 2
M Importare - Manipolare Json Array Sviluppo app per Android 2
M [PHP] Problemi su inserimento array nel db PHP 7
M [PHP] Visualizzare un array partendo dal numero 1 e non 0 PHP 5
G [ASP] Ciclare i valori di 2 array Classic ASP 2
S [PHP] Estrarre elementi array su più variabili PHP 5
S [PHP] Estrarre dati tabella in diversi array PHP 2
max1974 [PHP] Raggruppare array PHP 4
A [PHP] Caricamento database in array PHP 11
G sql select con array in php PHP 1
L [Java] Aggiungere elementi ad array JSON Java 0
S [PHP] individuare chiave elemento array PHP 7
A [PHP] Script con array con numeri che iniziano per 00 PHP 2
Emix [Javascript] Somma con array input HTML Javascript 1

Discussioni simili