Belirli değerleri tutmak için array_filter zıt ve korunması tuşları

3 Cevap php

Ben tuşları ile endeksli bir dizi, örneğin var:

array(
    'key1' => 'value1',
    'key2' => 'value2',
    ...
    'key57' => 'value57'
)

Ne, örneğin, sadece sahip olmak için, bu dizi "filtre" için:

array(
    'key2' => 'value2',
    'key57' => 'value57'
)

ve anahtarlarını korumak.

I () işlevini array_filter biliyorum, ama ben hayır ben sadece bu değerleri tutmak istiyorum, 2 ve 57. dışındaki tüm öğeleri HARİÇ istemediğin.

PHP çekirdek biz (array_keep sayabilirim işlevi) ya da bir şey orada var mı?

Teşekkürler.

3 Cevap

Saklamak istediğiniz tam olarak hangi tuşlara biliyorsanız, kolay bunu bir fonksiyon yazabiliriz:

<?php 
function array_keep($array, $keys) {
    return array_intersect_key($array, array_fill_keys($keys, null));
}

$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key57' => 'value57'
);

$newArray = array_keep($array, array('key2', 'key57'));

print_r($newArray);

Çıktı:

Array
(
    [key2] => value2
    [key57] => value57
)

Tom'un işlevine bir alternatif:

$keptValues = array_intersect_key($array, array_flip(array($key1, $key2)));

Ya da, daha az sihirli ama daha ayrıntılı ile:

$keptValues = array_intersect_key($array, array($key1 => null, $key2 => null));

Peki, array_filter geri döndürür false için hangi unsurları dışarı bırakır. Hayır, geri arama işlevi çek / mantığı tersine eğer sizin istediğiniz sonucu alırsınız?