web-dev-qa-db-fra.com

Comment trouver une valeur dans un tableau et le supprimer en utilisant PHP fonctions de tableau

Comment trouver une valeur existe dans un tableau et comment l'enlever. Si un tableau intégré php fonctionne pour cela. Après la suppression, j'ai besoin de l'ordre des index séquentiels. tout corps sait s'il vous plaît aidez-moi.

45
learner

Pour rechercher un élément dans un tableau, vous pouvez utiliser la fonction array_search et pour supprimer un élément d'un tableau, vous pouvez utiliser la fonction unset. Ex:

<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');

print_r($hackers);

// Search
$pos = array_search('Linus Trovalds', $hackers);

echo 'Linus Trovalds found at: ' . $pos;

// Remove from array
unset($hackers[$pos]);

print_r($hackers);
?>

Vous pouvez vous référer: http://www.php.net/manual/en/ref.array.php pour plus de fonctions liées au tableau.

82
mohitsoni
<?php
$my_array = array('sheldon', 'leonard', 'howard', 'penny');
$to_remove = array('howard');
$result = array_diff($my_array, $to_remove);
?>
80
Peter

Vous devez d’abord trouver la clé du tableau. Pour ce faire, utilisez array_search ()

Une fois cela fait, utilisez le unset ()

<?php
$array = array( 'Apple', 'orange', 'pear' );

unset( $array[array_search( 'orange', $array )] );
?>
12
Kerry Jones

Juste au cas où vous souhaiteriez utiliser l’un des codes mentionnés, sachez que array_search renvoie FALSE lorsque "l’aiguille" ne figure pas dans "haystack" et que, par conséquent, ces échantillons désélectionnent le premier élément (index zéro). Utilisez ceci à la place:

<?php
$haystack = Array('one', 'two', 'three');
if (($key = array_search('four', $haystack)) !== FALSE) {
  unset($haystack[$key]);
}
var_dump($haystack);

L'exemple ci-dessus affichera:

Array
(
    [0] => one
    [1] => two
    [2] => three
)

Et c'est bien!

7
chyno

Cette solution est la combinaison de la solution @ Peter pour la suppression de plusieurs occurrences et de la solution @chyno pour la suppression de la première occurrence. C'est ce que j'utilise.

/**
 * @param array $haystack
 * @param mixed $value
 * @param bool $only_first
 * @return array
 */
function array_remove_values(array $haystack, $needle = null, $only_first = false)
{
    if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); }
    if (empty($haystack)) { return $haystack; }

    if ($only_first) { // remove the first found value
        if (($pos = array_search($needle, $haystack)) !== false) {
            unset($haystack[$pos]);
        }
    } else { // remove all occurences of 'needle'
        $haystack = array_diff($haystack, array($needle));
    }

    return $haystack;
}

Regardez aussi ici: PHP tableau delete par valeur (pas clé)

4
algorhythm

Une fonction qui n'a pas été mentionnée est array_filter. Il vous suffit de passer une fonction de rappel qui prend chaque élément en argument et renvoie true ou false si cet élément doit rester ou être supprimé. Cela a également l'avantage d'éliminer les valeurs en double.

Vous pouvez l'utiliser comme ceci:

$myArray = array('one', 'two', 'deleteme', 'three');
$output = array_filter($myArray, function($val) { return $val != 'deleteme'; });

Et si vous souhaitez réindexer le tableau, vous pouvez transmettre le résultat à array_values comme suit:

$output = array_values($output);
3
Kodos Johnson

Tout d’abord, comme d’autres l'ont mentionné, vous utiliserez les méthodes " array_search () " & " unset () " ci-dessous: -

<?php
$arrayDummy = array( 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg' );
unset( $arrayDummy[array_search( 'dddd', $arrayDummy )] ); // Index 3 is getting unset here.
print_r( $arrayDummy ); // This will show the indexes as 0, 1, 2, 4, 5, 6.
?>

Maintenant, pour réindexer le même tableau, sans trier les valeurs du tableau, vous devrez utiliser la méthode " array_values ​​() " comme indiqué ci-dessous: -

<?php
$arrayDummy = array_values( $arrayDummy );
print_r( $arrayDummy ); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5.
?>

J'espère que ça aide.

1
Knowledge Craving

Voici comment je le ferais:

$terms = array('BMW', 'Audi', 'Porsche', 'Honda');
// -- purge 'make' Porsche from terms --
if (!empty($terms)) {
    $pos = '';
    $pos = array_search('Porsche', $terms);
    if ($pos !== false) unset($terms[$pos]);
}
0
Mike Q