web-dev-qa-db-fra.com

Comment filtrer un tableau à deux dimensions par valeur

Comment créer une fonction qui filtre un tableau à deux dimensions par valeur?

Étant donné le tableau suivant: 

Array
(
    [0] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => NEW
            [appointment] => 0
        )

    [1] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => CALL1
            [appointment] => 0
        )

    [2] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => Finance
            [status] => CALL2
            [appointment] => 0
        )

    [3] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => Partex
            [status] => CALL3
            [appointment] => 0
        )

Comment pourrais-je filtrer le tableau pour afficher uniquement les tableaux qui contiennent une valeur spécifique dans la clé name? Par exemple name = 'CarEnquiry'

La sortie résultante serait: 

Array
(
    [0] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => NEW
            [appointment] => 0
        )

    [1] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => CALL1
            [appointment] => 0
        )

    )

MODIFIER

J'ai oublié de mentionner que la valeur de recherche doit être interchangeable, c'est-à-dire name = 'CarEnquiry' ou name = 'Finance'

12
aphextwix

Utilisez la fonction array_filter de PHP avec un rappel.

$new = array_filter($arr, function ($var) {
    return ($var['name'] == 'CarEnquiry');
});

Edit: s'il doit être interchangeable, vous pouvez légèrement modifier le code:

$filterBy = 'CarEnquiry'; // or Finance etc.

$new = array_filter($arr, function ($var) use ($filterBy) {
    return ($var['name'] == $filterBy);
});
36
dchesterton

array_filter est la fonction dont vous avez besoin. http://php.net/manual/en/function.array-filter.php

Donnez-lui une fonction de filtrage comme celle-ci:

function my_filter($elt) {
    return $elt['name'] == 'something';
}
1
Benoît Latinier
<?php



    function filter_array($array,$term){
        $matches = array();
        foreach($array as $a){
            if($a['name'] == $term)
                $matches[]=$a;
        }
        return $matches;
    }

    $new_array = filter_array($your_array,'CarEnquiry');

?>
0
ksealey
function multi_array_search_with_condition($array, $condition)
{
    $foundItems = array();

    foreach($array as $item)
    {
        $find = TRUE;
        foreach($condition as $key => $value)
        {
            if(isset($item[$key]) && $item[$key] == $value)
            {
                $find = TRUE;
            } else {
                $find = FALSE;
            }
        }
        if($find)
        {
            array_Push($foundItems, $item);
        }
    }
    return $foundItems;
}

Ceci ma fonction peut utiliser à propos de ce problème. Vous pouvez utiliser ;

$ filtré = multi_array_search_with_condition ($ array, array ('name' => 'CarEnquiry')); Vos objets filtrés seront extraits de votre tableau à 2 dimensions

0
Metin Erbek