Tronquer un tableau array

poupilou

WRInaute impliqué
Salut à tous,

Voici mon code :
Code:
$ma_valeur = 1.23;
$mes_data = = array(0.25,0.50,0.75,1.00,1.25,1.50,1.75,2.00,$ma_valeur);
sort($mes_data);

Je voudrais tronquer mon tableau comme ceci : array(0.75,1.00,1.23,1.25,1.50);

C'est à dire ne garder que 2 valeurs à gauche et 2 valeurs à droite de ma valeur 1.23, comment faire cela ?

Merci pour votre aide.
 

spout

WRInaute accro
http://php.net/manual/fr/function.array-splice.php

SSI $ma_valeur unique:
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /><br />$ma_valeur&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1.23</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$mes_data&nbsp;</span><span class="syntaxkeyword">=&nbsp;array(</span><span class="syntaxdefault">0.25</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0.50</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0.75</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.00</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.25</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.50</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.75</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2.00</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$ma_valeur</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">sort</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">array_splice</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">array_search</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ma_valeur</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">)&nbsp;-&nbsp;</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">5</span><span class="syntaxkeyword">));&nbsp;</span><span class="syntaxdefault"></span>
https://ideone.com/kauFty
 

poupilou

WRInaute impliqué
Merci Spout, je ne connaissais pas cette fonction array_slice... elle est très pratique, ça marche parfaitement bien :D
 

poupilou

WRInaute impliqué
J'ai modifié un peu mon code précédent.

J'ai rajouté une ligne supprimant les doublons dans le array avec la fonction array_unique et j'ai modifié mon tableau array qui est maintenant multi-dimensionnel, ça donne le code ci-dessous :

Code:
$ma_valeur = 1.23;
$mes_data = array(
    0 => array("poids"=>0.25, "longueur"=>4, "largeur"=>2),
    1 => array("poids"=>0.50, "longueur"=>5, "largeur"=>2.5),
    2 => array("poids"=>0.75, "longueur"=>6, "largeur"=>2.8),
    3 => array("poids"=>1.00, "longueur"=>7, "largeur"=>3),
    4 => array("poids"=>1.25, "longueur"=>8, "largeur"=>3.5),
    5 => array("poids"=>1.50, "longueur"=>9, "largeur"=>3.9),
    6 => array("poids"=>1.75, "longueur"=>10, "largeur"=>4.3),
    7 => array("poids"=>$ma_valeur, "longueur"=>7.2, "largeur"=>3.2),
);
sort($mes_data);
$data = array_unique($mes_data);
print_r(array_splice($data, array_search($ma_valeur, $data) - 2, 5));

Ce code ne marche pas :(

A priori, la fonction array_unique ne fonctionne pas pour les tableaux multi-dimensionnels.

Comment faire avec ce tableau multi-dimensionnel pour obtenir la même résultat que précédemment tout en supprimant les éventuels doublons du array ?
 

poupilou

WRInaute impliqué
Merci Spout pour ton aide.

J'ai été obligé de passer par 2 fonctions php pour contourner le array_unique (on ne peut pas supprimer les doublons avec cette fonction dans un tableau multi-dimensionnel) et le array_column (disponible à partir de PHP 5.5 et j'ai PHP 5.3.3), ce qui donne le code ci-dessous :
Code:
// Fonction qui supprime les doublons dans un tableau multi-dimensionnel
function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 
    
    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
} 
// Fonction qui recherche une valeur dans un tableau multi-dimensionnel
function searchArrayKeyVal($sKey, $id, $array) {
   foreach ($array as $key => $val) {
       if ($val[$sKey] == $id) {
           return $key;
       }
   }
   return false;
}

$ma_valeur = 0.67;
$mes_data = array(
    array('poids' => 0.25, 'longueur' => 4, 'largeur' => 2),
    array('poids' => 0.50, 'longueur' => 5, 'largeur' => 2.5),
    array('poids' => 0.75, 'longueur' => 6, 'largeur' => 2.8),
    array('poids' => 1.00, 'longueur' => 7, 'largeur' => 3),
    array('poids' => 1.25, 'longueur' => 8, 'largeur' => 3.5),
    array('poids' => 1.50, 'longueur' => 9, 'largeur' => 3.9),
    array('poids' => 1.75, 'longueur' => 10, 'largeur' => 4.3),
    array('poids' => $ma_valeur, 'longueur' => 5.2, 'largeur' => 2.6)
);
sort($mes_data);
$data = unique_multidim_array($mes_data,'poids');
$resultat = array_splice($data, searchArrayKeyVal("poids", $ma_valeur, $data) -2, 5);
print_r($resultat);
Et là ça marche parfaitement bien :D
 

Discussions similaires

Haut