2 votes

Comment filtrer un tableau par une partie de la clé ?

J'ai un tableau comme celui-ci :

Array(
[id-1] => N
[nm-1] => my_val_01;
[id-48] => S
[nm-48] => my_val_02;
[id-52] => N
[nm-52] => my_val_03;
[id-49] => N
[nm-49] => my_val_04;
[id-50] => N
[nm-50] => my_val_05;
}

et souhaite filtrer par partie de la clé. Dans ce cas, j'aimerais avoir toutes les clés qui ont "id-", et obtenir le résultat suivant :

Array(
[id-1] => N
[id-48] => S
[id-52] => N
[id-49] => N
[id-50] => N
}

Quelqu'un peut-il nous aider ?

0voto

Paul Rysevets Points 39

Les réponses, sur Internet, qui utilisent array_intersect_key sont INcorrectes. Elles filtrent correctement, mais produisent des valeurs d'"index des clés filtrées" au lieu des valeurs du tableau d'entrée.

Voici une version corrigée

/**
 * Filter array keys by callback
 * 
 * @param array $input
 * @param $callback
 * @return NULL|unknown|multitype:
 */
function array_filter_keys($input, $callback)
{
    if (!is_array($input)) {
        trigger_error('array_filter_key() expects parameter 1 to be array, ' . gettype($input) . ' given', E_USER_WARNING);
        return null;
    }

    if (empty($input)) {
        return $input;
    }

    $filteredKeys = array_filter(array_keys($input), $callback);
    if (empty($filteredKeys)) {
        return array();
    }

    $input = array_intersect_key($input, array_flip($filteredKeys));

    return $input;
}

0voto

Dbx Points 13

Si vous utilisez la dernière version de PHP :

$filtered_arr = array_filter($arr, 'filter_my_array', ARRAY_FILTER_USE_KEY);

function filter_my_array( $key ) {

    return preg_match("/^id-\d+/", $key);

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X