8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je souhaite effectuer une recherche dans le style d'array_search mais sur un tableau associatif imbriqué. En gros, j'ai quelque chose comme ceci:


$tableauGlobal = array (
    
    'Mon élément' => array (
        
        'fiche' => 'mon texte',
        'description' => 'mon texte',
        'année' => '2005'
        
        ),
        
    'Un super élément' => array (

           'fiche' => 'mon texte',
           'description' => '[b][#darkred]Hello World![/#][/b]',
           'année' => '2007'

           ),
           
    'Un dernier élément' => array (
            'fiche' => 'mon texte',
            'description' => 'mon texte',
            'année' => '2003'
            )
    
);


J'aimerais pouvoir effectuer une recherche dans ce tableau global afin de déterminer à quel élément appartient mon "Hello World". Je n'ai pas besoin de tester si "Hello World" existe (ça sera toujours vrai), seulement de pouvoir afficher sur ma page la chaîne "Un super élément".

Une idée?

Merci,
Benjamin
Modifié par Benjamin D.C. (31 Jul 2007 - 18:18)
Salut Smiley cligne ,

j'aurais fait quelque chose comme ça :
<?php
$tableauGlobal = array (
    'Mon élément' => array (
        'fiche' => 'mon texte',
        'description' => 'mon texte',
        'année' => '2005'
        ),
    'Un super élément' => array (
           'fiche' => 'mon texte',
           'description' => 'Hello World!',
           'année' => '2007'
           ),
    'Un dernier élément' => array (
            'fiche' => 'mon texte',
            'description' => 'mon texte',
            'année' => '2003'
            )
);

//function AffichElem ($array) {
//foreach ($array as $Element => $tab_elem)
//	{
//	echo $Element.'<br>';
//	foreach ($tab_elem as $zone => $valeur) {
//		echo $zone."  -->  ".$valeur.'<br>';
//		}
//		echo '<br>';
//	}
//}

function SearchElem ($array, $desc) {
foreach ($array as $Element => $tab_elem)
	{
	foreach ($tab_elem as $zone => $valeur) {
		if ($valeur == $desc) {
			return $Element;
			}
		}
	}
return 'Elément inconnu';
}

echo SearchElem($tableauGlobal, 'Hello World!');
?>

A+

*Edit: ou avec array_search :
function SearchElem ($array, $desc) {
foreach ($array as $Element => $tab_elem)
	{
	if (array_search($desc, $tab_elem)) {
		return $Element;
		}
	}
return 'Elément inconnu';
}

Modifié par Heyoan (31 Jul 2007 - 18:10)
Une petite fonction qui fait ça tirée de mon stock Smiley lol

<?php

function array_search_recursive($needle, $haystack, $strict=false) {
	foreach($haystack as $key => $value) {
		if(is_array($value)) {
			$found = array_search_recursive($needle, $value, $strict);
			if($found !== false) {
				array_unshift($found, $key);
				return $found;
			}
		}
		else {
			if($strict === true) {
				if($needle === $value)
					return array($key);
			}
			else {
				if($needle == $value)
					return array($key);
			}
		}
	}
	return false;
}
?>


Le résultat est retourné sous la forme d'un tableau numérique ou chaque index représente une incrémentation.
Par exemple pour toi:
Array
(
    [0] => Un super élément
    [1] => description
)


Le reste de l'utilisation est identique à array_search();


edit: bah zut grilled Smiley biggol
Modifié par Necromantik (31 Jul 2007 - 18:24)