Page 1 sur 2

Verifier les clefs du premier tableau au 2eme tableau

Posté : 11 mai 2011, 05:08
par rimie1
Bonjour!

Je voudrais verifier si les clefs du premier tableau existent au 2eme, dans mon cas c'est '1' et '2' et retourner ses valeurs (qui sont les clefs du 2eme tableau), le resultat souhaitait est:

1 exists et sa valeur est: yyyy
2 exists et sa valeur est: zzzzz
<?php
function checkit()
{
	
	$tab1 = array(1=>'un', 2=>'deux', 3=>'trois');
	$tab2 = array('x'=>10, 'yyyy'=>1, 'zzzzz'=>2);
	
foreach($tab2 as $k2=>$v2)
{	
	echo 'k2 est: '.$k2.'<br>';
	echo 'v2 est: '.$v2.'<br>';
}

foreach($tab1 as $k1=>$v1)
{
	if(in_array($k1,$tab2))
	{
		echo '<font color="green">'.$k1 .' exists et sa valeur est: '.$k2.'</font><br>';
	}
	else
	{
		echo '<font color="red">'.$k1 .' DO NOT EXIST</font><br>';
	}
	
	echo 'k1 est: '.$k1.'<br>';
	echo 'v1 est: '.$v1.'<br>';
}

}

echo checkit();
?>
merci

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 11 mai 2011, 08:03
par xTG
Ton code est bien parti mais tu vérifies la valeur et non la clé.
Utilises array_key_exists() à la place de in_array()

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 13 mai 2011, 04:31
par rimie1
merci xTG, j'ai echappe la phase de array_key_exists, juste pour eclaircir une petite chose:

+ Le formulaire dispose d'un champs 'SELECT', que j'ajoute le nom avec des options, les options sont en quelque sorte comme: clef=>valeur,... de plus j'ai ajoute une autre option afin de desactiver ou selectionner une option (DISABLED, SELECTED):
<?php
$frm->addSelect('selectName', array('clesssssssssss1'=>'valeur1', 'clef2'=>'valeur2', 'clefffffffffff3'=>'valeur3'), array('DISABLED'=>'valeur1', 'SELECTED'=>'valeur3'));
?>
alors je verifie en premier lieu si DISABLEd, SELECTEd existent au tableau avec array_key_exists (phase echappee), si tout est bon, je prends la valeur par exemple de DISABLED qui est 'valeur1' et je le mets en DISABLED, de meme pour selected, enfin de compte le code serait:
<?php

// DISABLED, SELECTED,..
					foreach($this->moreOptions as $mK=>$mV)
					{
							// clefs et valeurs
							if(in_array($mV, $this->options))
							{
								foreach($this->options as $oK=>$oV)
								{
									echo 'OV: '.$oV.' MV: '.$mV.'<br>';
									
									
									// si options valeurs sont egaux a more options valeurs
									if($oV == $mV)
									{
										echo 'ov <font color="red">'.$oV.' avec l index est: '.$mK.'</font> est egal a mv <font color="red">'.$mV.'</font> et sa valeur est: <font color="green">'.$oK.'</font><br>';
										
										$select .= '<option p value="'.$oV.'" '.$mK.'="'.$mK.'">'.$oK.'</option>';
										break;
										
									}
									else
									{
										$select .= '<option v value="'.$oV.'">'.$oK.'</option>';
										
									}
									
								}
								
							}
					}


$frm->addSelect('selectName', array('clesssssssssss1'=>'valeur1', 'clef2'=>'valeur2', 'clefffffffffff3'=>'valeur3'), array('DISABLED'=>'valeur1', 'SELECTED'=>'valeur3'));

?>

l'affichage HTML est:

[html]
<select name="selectName"><option p value="valeur1" DISABLED="DISABLED">clesssssssssss1</option><option v value="valeur1">clesssssssssss1</option><option v value="valeur2">clef2</option><option p value="valeur3" SELECTED="SELECTED">clefffffffffff3</option>
[/html]
si vous remarquez que pour valeur1 en double:
<option p value="valeur1" DISABLED="DISABLED">clesssssssssss1</option>
<option v value="valeur1">clesssssssssss1</option>
j'ai mis p et v que pour les differencier, pourquoi ce champs exactement est en double??

Merci

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 13 mai 2011, 08:01
par xTG
Beh tout simplement que tu fais un in_array() mais que tu te fiches de son résultat. :/
if(in_array($mV, $this->options))
{
       foreach($this->options as $oK=>$oV)
Elle vient faire quoi cette boucle foreach ? Avec le in_array tu as déjà trouvé que l'index existait, il ne reste plus qu'à le traiter.

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 14 mai 2011, 09:29
par rimie1
je voudrais recuperer la valeur oV afin de verifier si est egal a mV, si oui je vais ajouter l'attribut a cette option
foreach($this->options as $oK=>$oV)
                                                                {
                                                                        echo 'OV: '.$oV.' MV: '.$mV.'<br>';
                                                                       
                                                                       
                                                                        // si options valeurs sont egaux a more options valeurs
                                                                        if($oV == $mV)
                                                                        {

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 16 mai 2011, 23:54
par rimie1
y a t il quelqu'un qui a rencontre ce genre de problemes?

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 17 mai 2011, 08:09
par xTG
Tu n'as semble-t-il pas compris.
Ce code :
foreach($this->options as $oK=>$oV)
                                                                {
                                                                        echo 'OV: '.$oV.' MV: '.$mV.'<br>';
                                                                       
                                                                       
                                                                        // si options valeurs sont egaux a more options valeurs
                                                                        if($oV == $mV)
                                                                        {
Est équivalent à :
if(in_array($mV, $this->options))

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 17 mai 2011, 20:30
par rimie1
essayez ce code, ce sont pas les memes:
<?php

public final function addSelect($name, $options=array(), $moreOptions)
				{
					$this->name = $name;
					$this->options = $options;
					$this->moreOptions = $moreOptions;
					
					$select = '<select name="'.$this->name.'">';
					
					
					
					// DISABLED, SELECTED, ..
					foreach($this->moreOptions as $mK=>$mV)
					{
							// clefs et valeurs
							if(in_array($mV, $this->options))
							{
								//foreach($this->options as $oK=>$oV)
								//{
									
								//	echo 'OV: <font color="red">'.$oV.'</font> avec clef est: <font color="green">'.$oK.'</font> MV: <font color="red">'.$mV.'</font> avec clef est<font color="green"> :'.$mK.'</font><br>';	
																		
									// si options valeurs sont egaux a more options valeurs
									
									echo 'ov est: '.$oV.'<br>';
									echo 'mv est: '.$mV.'<br>';
									
									if($oV == $mV)
									{
										$addOptions = $mK.'="'.$mK.'"';
									$select .= '<option p value="'.$oV.'" '.$addOptions.'>'.$oK.'</option>';
									//break;	
									}
									else
									{
										$select .= '<option v value="'.$oV.'">'.$oK.'</option>';
									}
									
								//}
								
							}
					}
					
									
					
$frm->addSelect('selectName', array('clesssssssssss1'=>'valeur1', 'clef2'=>'valeur2', 'clefffffffffff3'=>'valeur3'), array('DISABLED'=>'valeur1', 'SELECTED'=>'valeur1'));
					
?>

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 19 mai 2011, 20:09
par rimie1
maintenant tous ont une valeur DISABLED:
<?php
// DISABLED, SELECTED, ..
					foreach($moreOptions as $mK=>$mV)
					{
							// clefs et valeurs
							if(array_key_exists($mK, $options))
							{		
								foreach($options as $oK=>$oV)
								{
									//$oK.$oV;
									$addOptions = $mV.'="'.$mV.'"';
									$select .= '<option p value="'.$oV.'" '.$addOptions.'>'.$oK.'</option>';
								}
							}
							else
							{
									$select .= '<option v value="'.$oV.'">'.$oK.'</option>';
							}	
							}
?>
le resultat HTML

<option p value="valeur1" DISABLED="DISABLED">clef1</option><option p value="valeur2" DISABLED="DISABLED">clef2</option><option p value="valeur3" DISABLED="DISABLED">clef3</option>

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 19 mai 2011, 20:43
par xTG
Peux-t-on voir le contenu des deux array d'options ?

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 19 mai 2011, 23:33
par rimie1
Peux-t-on voir le contenu des deux array d'options ?
le voila:
$frm->addSelect('selectName', array(
'clef1'=>'valeur1',
'clef2'=>'valeur2',
'clef3'=>'valeur3'),

array(
'clef1'=>'DISABLED'

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 20 mai 2011, 07:59
par xTG
Donc si je comprends bien $options c'est un array fixe. Pourquoi le passer en paramètre ? Il devrait être stocké dans l'objet ??
Et $moreOptions est donc la saisie de l'utilisateur, et il faut vérifier que ces options existent en regardant dans $options ?

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 20 mai 2011, 09:49
par rimie1
Donc si je comprends bien $options c'est un array fixe. Pourquoi le passer en paramètre ? Il devrait être stocké dans l'objet ??
Et $moreOptions est donc la saisie de l'utilisateur, et il faut vérifier que ces options existent en regardant dans $options ?
les 2 sont modifiables par l'utilisateur, il peut ajouter n'importe quel nombre d'options:
$frm->addSelect('selectName', array(
'clef1'=>'valeur1',
'clef2'=>'valeur2',
'clef3'=>'valeur3',
'clef4'=>'valeur4',
'clef5'=>'valeur5',
'clef6'=>'valeur6'
),

array(
'clef1'=>'DISABLED',
'clef2'=>'SELECTED',


Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 20 mai 2011, 18:03
par xTG
Euh ok mais quelle relation y-a-t-il entre ton premier array et le second ?
Tu as fait un code vérifiant une égalité des valeurs entre les deux mais dans tes exemples je ne vois qu'un array semblant présenter l'attribut value du champ et le second qui présente des attributs tels que selected ou disabled.

Re: Verifier les clefs du premier tableau au 2eme tableau

Posté : 20 mai 2011, 18:14
par rimie1
Euh ok mais quelle relation y-a-t-il entre ton premier array et le second ?
Tu as fait un code vérifiant une égalité des valeurs entre les deux mais dans tes exemples je ne vois qu'un array semblant présenter l'attribut value du champ et le second qui présente des attributs tels que selected ou disabled.
ce que je veux faire est le suivant, je donne un exemple simple:
$frm->addSelect('selectName', array(
'clef1'=>'valeur1',
'clef2'=>'valeur2',
'clef3'=>'valeur3',
'clef4'=>'valeur4',
'clef5'=>'valeur5',
'clef6'=>'valeur6'
),

array(
'clef1'=>'DISABLED',
'clef2'=>'SELECTED',

 

+ je prends le 2eme array avec sa valeur 'DISABLED', sa clef et 'clef1',
+ je cherche la valeur de la clef du premier tableau, au 2eme tableau 'valeur1',
+ je l'insere dans l'option,
+ soit mon code HTML
<select ....>
<option value="valeur1' DISABLED="DISABLED">clef1</option>
<option value="valeur2'>clef2</option>
<option value="valeur3'>clef3</option>
..
</select>
j'espere que l'idee est claire :)