Ilişkilendirilebilir dizinin değerlerin bir alt kümesini ayıklanıyor (php)

2 Cevap php

Ben görünüşte çok basit bir şey yapmak istiyorum, ama bu konuda bir şey bulamıyorum: basitçe array_splice benzer bir dizinin bir alt kümesini ayıklamak, ancak using keys to retrieve the values:

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
              /* many more data I don't need here ... */);

list($name, $age, $id) = array_splice_by_keys($data,
                          array('personName', 'personAge', 'personId');

Bütün bunlardan başarısız olursa, tuşları ile ilişkilendirilebilir bir dizi filtre yerleşik bir işlevi var değil mi? Örneğin:

$filteredArray = array__extract__keys__and__values($srcArray, $arrayOfWantedKeys);

// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
                  array('personName', 'personAge', 'personId');

echo $wanted_values['personName'];

Ben ilkini yapmak istiyorum nedeni sanırım, benim tüm kod üzerinde ilişkisel dizi erişimi tekrarlamak için sevmiyorum ki, örneğin bir döngü içinde çok kullanılan değerleri (kopyalamak için daha iyi optimize edilmiş gibi görünüyor ), yerel bir değişkene, artı $ someArray ['name'] daha isim $ yazmanız çok daha kolay.

EDIT: Teşekkürler, ben liste ile kullanım için sanırım, çözüm olurdu

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

Array_flip arasında Intesresting kullanın!

2 Cevap

php sürümü> = sen kullanabilirsiniz 5.1.0 array_intersect_key:

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
          'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));

$ex önemi yok değerleri, sadece mevcut olmak zorunda.

Hemen hemen SilentGhost cevabı aynı ama bu daha kolay ve aynı zamanda daha yavaş olabilir

array_intersect_key($array, array_flip($wantedKeys));