Ci mancava l'array multidimensionale

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

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
 
ciao
probabilmente ti conviene usare foreach annidati

PHP:
<?php
//......
foreach($array as $chiave =>valore){
	if(is_array($chiave){
		foreach($chiave as $valore_2){
			//....
		}
	}else{
		//.....
	}
}
//....
?>
 
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
 
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
.......
 
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>"; 
}
}
?>
 
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)
 
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]?
 
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:
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
 
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
 
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
 
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
 
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>
 
ma la sessione(materia non ancora afforntata) posso usarla solo su queste ultime tre pagine di script?

o devo reinerirle dall'inizio?
 
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 -->
 
stavo scrivendo che non ci riuscivo quando ..................

ci sono risucito...

grande grande

thank you
 

Discussioni simili