array_intersect_ukey(array $array1, array $array2, callable $key_compare_func): array
Cette fonction renvoie un tableau qui contient toutes les clés de $ array1 qui existent également dans $ array2 . La méthode de comparaison des clés est déterminée par key_compare_func .
array_keys(array $array, mixed $search_value = null, bool $strict = false): array
Array_keys renvoie toutes les clés du tableau, ou, dans le cas d'une valeur spécifiée, renvoie la clé correspondant à la valeur.
Imaginez que lorsque nous traitons les données renvoyées par un ensemble d'API, nous devons filtrer les champs spécifiés à partir de plusieurs champs de retour pour un traitement ultérieur, tel que la journalisation ou la présentation à l'avant. Voici un scénario typique.
$apiData = [
'id' => 101,
'username' => 'alice',
'email' => '[email protected]',
'status' => 'active',
'created_at' => '2024-06-01 12:00:00',
'updated_at' => '2024-06-10 08:30:00'
];
$logFields = ['id', 'username', 'email'];
Nous voulons garder uniquement le contenu avec les clés $ apidata 'id' , «nom d'utilisateur» et «e-mail» et rejeter d'autres champs.
$allowedKeys = array_flip($logFields);
$filteredData = array_intersect_ukey(
$apiData,
$allowedKeys,
function ($key1, $key2) {
return strcmp($key1, $key2);
}
);
Array
(
[id] => 101
[username] => alice
[email] => [email protected]
)
array_flip ($ logFields) flips le tableau des noms de clés dont nous devons être un tableau dont le nom de clé est le nom et la valeur du champ, de sorte qu'il peut être utilisé comme objet de comparaison pour array_intersect_ukey .
Utilisez STRCMP comme fonction de comparaison pour implémenter la comparaison de chaînes standard.
Le résultat final est l'ensemble des champs dans lesquels la clé $ Apidata existe dans $ Logfields .
Supposons que nous ayons affaire à un ensemble de données de configuration utilisateur avec URL, nous voulons conserver uniquement la partie contenant le nom de domaine URL de liste blanche.
$userSettings = [
'homepage' => 'https://gitbox.net/home',
'avatar' => 'https://cdn.gitbox.net/avatar.jpg',
'backup_site' => 'https://example.com/backup',
'profile' => 'https://gitbox.net/user/profile'
];
$validUrls = array_keys(
array_filter($userSettings, function ($url) {
return parse_url($url, PHP_URL_HOST) === 'gitbox.net';
})
);
$validKeys = array_flip($validUrls);
$filteredSettings = array_intersect_ukey(
$userSettings,
$validKeys,
'strcmp'
);
print_r($filteredSettings);
Array
(
[homepage] => https://gitbox.net/home
[profile] => https://gitbox.net/user/profile
)
Filtrez d'abord le nom de domaine principal de l'URL dans la valeur via array_filter .
Array_keys extrait les noms clés qui répondent aux exigences.
Filtrez ensuite les données via array_flip et array_intersect_ukey .
Cette méthode nous permet de préserver les clés correspondantes dans le tableau en fonction de une logique dans la valeur , effectuant ainsi un traitement de données structuré très flexible.