Supprimer des valeurs d'un Array

Eléphant du PHP | 428 Messages

05 mars 2010, 21:02

Bonjour,

Je désirerai récupérer un index de l'array par rapport à son titre et supprimer des valeurs après cet index ... mais pas toutes les valeurs !
En effet, je désirerai supprimer les valeurs se situant après un index définis (d'où l'intérêt de pouvoir récupérer l'index pour savoir après lequel on doit supprimer)

Exemple array :

Array (
[0] => Array ( [0] => test [1] => 1 )
[1] => Array ( [0] => test 1 [1] => 8 )
[2] => Array ( [0] => test 2 [1] => 4 )
[3] => Array ( [0] => test 3 [1] => 5 )
[4] => Array ( [0] => test 4 [1] => 6 )
[5] => Array ( [0] => test 5 [1] => 7 )
)

Je désirerai récupérer l'index principal par rapport à son titre (exemple : si le titre = test2, on isole l'index [2])
Après, je désirerai supprimer tous le contenu de l'array APRES l'index [2] ==> DONC, supprimer index [3 à 5].

J'ai regardé un peu partout sur le net mais je n'ai rien trouvé. De plus, je ne sais pas si la méthode décrite est la bonne pour faire ce que je dois faire (mais le principe y est).

Avez vous une idée de comment faire ?

Merci,
raph

ViPHP
ViPHP | 2287 Messages

06 mars 2010, 10:07

Bonjour,

C'est typiquement le genre d'opération pour lesquelles on envisage l'utilisation d'une base de données.

D'une manière générale, quand tu ne sais pas comment faire quelquechose, commence déjà par regarder ce que tu peux faire, ça donne souvent des idées ;)

La liste des fonctions de manipulation de tableaux de PHP (très pratique à connaître, au demeurant) : http://fr2.php.net/manual/fr/ref.array.php

Pour ton souci, tu peux y arriver assez facilement, en découpant ton "gros" problème en plusieurs petits sous-problèmes :

- identifier une valeur par son titre (et retourner l'index correspondant) : array_search(), in_array(), fonction maison basée sur une boucle de recherche (foreach + return)

- effacement d'un nombre de lignes déterminé du tableau à partir d'un index donné : array_splice()
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 428 Messages

06 mars 2010, 14:41

Bonjour,

J'ai trouvé un code qui fait en sorte de retrouver un INDEX PRIMAIRE par rapport à un texte donné (se situant dans l'array) :
http://fr2.php.net/manual/fr/function.a ... .php#92991

Mais sil ne fonctionne pas ... pourtant, c'est bien ça qu'il me faut.
$array = array (
"shoes" => array("test1"=> "123","test2"=>"1234","test3"=>"12345"),
"shoes2"=> array("test1"=>"324","test2"=>"3515","test3"=>"123131")
);
array_search_value("123",$array,"test1"); // would return shoes

Voici le code que la personne fournis :
function array_search_value($needle,$haystack,$arraykey=FALSE) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;

        if($arraykey){
           
            if($needle == $value[$arraykey]){
            return 'value1'.$value['id'];
            }
           
            if(array_search_value($needle,$value[$arraykey]) == true) {
            return 'value2'.$current_key;
            }
           
        }else{
           
            if($needle == $value)
            return 'value3'.$value;
           
            if(array_search_value($needle,$value) == true) {
                return 'value4'.$current_key;
            }
           
           
        }
       
       
    }
    return false;
}

Quand je fais un echo ou print_r de : array_search_value("123",$array,"test1");, il ne me renvoie rien mis à part : "value1" alors qu'il devrait renvoyer "shoes". (C'est moi qui ai rajouté value1, value2 ... dans la fonction (pour avoir un retour même si vide)).

Avez-vous une idée , j'en ai vraiment besoin.

Merci,
raph

ViPHP
ViPHP | 2287 Messages

06 mars 2010, 15:12

Bonjour,

Ce code est foireux et comme il n'est même pas de toi (et inutilement compliqué) je ne souhaite pas t'aider à le corriger. L'idée n'était pas que tu te jettes sur le premier code qui passe mais que tu fasses le tien pour l'apprentissage à l'aide des indications que je t'ai fournies (tu en as pour 10 minutes en prenant tout ton temps).

Si tu as du mal je t'y aiderai.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 428 Messages

06 mars 2010, 18:13

Oui en effet, c'est assez foireux comme méthode.
J'ai fait cette fonction me permettant de récupérer l'index primaire d'un array multidimentionnel par rapport à une valeur de l'array.

En effet, si dans mon array, j'ai une valeur : administration et que administration et regroupée dans un array principal avec l'index 0, cette fonction permet de retrouver et récupérer l'index principal (dans ce cas, 0).

Exemple array :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => administration [1] => 1 ) [1] => Array ( [0] => titre page 1 [1] => 8 ) [2] => Array ( [0] => titre page 2 [1] => 4 ) [3] => Array ( [0] => titre page 3 [1] => 5 ) [4] => Array ( [0] => titre page 4 [1] => 6 ) [5] => Array ( [0] => titre page 5 [1] => 7 ) )
// Fonction pour le QuickNav permettant de récupérer un index primaire d'un array multi-dimentionnel
		function IndexSearch ($search_item,$array) {
			foreach($array as $key=>$value) {
			 $default_key=$key;
				if($search_item===$value OR (is_array($value) && IndexSearch($search_item,$value) !== false)) {
				 return $default_key;
				}
			}
		 return false;
		}
Ensuite, je peux supprimer avec array_splice :
// $title proviens de la base de donnée et mon array est en session
// On Teste l'index parent de l'array par rapport à un titre donné et on rajoute 1 pour ne pas se supprimer sois-même et puis on supprime le reste.
	 $CurrentID = IndexSearch($title,$_SESSION ['quicknav']) +1;
	 array_splice($_SESSION ['quicknav'], $CurrentID);

Ca marche nickel !
Merci pour ton aide Calimero ;)
Modifié en dernier par visualight le 06 mars 2010, 19:38, modifié 2 fois.

ViPHP
ViPHP | 2287 Messages

06 mars 2010, 18:15

T'es un chef, bravo ;)

Content d'avoir pu t'aider :D . @+
if(!@work()){ Nespresso(); } else { what(); }
______________________________

zinouba
Invité n'ayant pas de compte PHPfrance

13 mai 2010, 12:43

je veut supprimer des enregistrement d'un base de données,je veut savoir une fonction php qui permet de supprimer un ou +enregistrements