استخراج مجموعة فرعية من القيم من مصفوفة ترابطية (php)

StackOverflow https://stackoverflow.com/questions/569379

  •  05-09-2019
  •  | 
  •  

سؤال

أريد أن أفعل شيئًا يبدو بسيطًا جدًا، لكن لا يمكنني العثور على أي شيء عنه:ما عليك سوى استخراج مجموعة فرعية من مصفوفة مشابهة لـ array_splice، ولكن باستخدام المفاتيح لاسترداد القيم :

$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');

إذا فشل كل شيء آخر، أليس هناك وظيفة مدمجة لتصفية مجموعة ترابطية حسب المفاتيح؟على سبيل المثال:

$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'];  

أعتقد أن السبب وراء رغبتي في القيام بالأمر الأول هو أنني لا أرغب في تكرار الوصول إلى المصفوفة النقابية في جميع أنحاء الكود الخاص بي، فقد يبدو من الأفضل نسخ القيم المستخدمة كثيرًا (في حلقة على سبيل المثال )، في متغير محلي، بالإضافة إلى أنه من الأسهل كتابة $name بدلاً من كتابة $somearray['name'].

يحرر:شكرًا، أعتقد أنه للاستخدام مع القائمة، سيكون الحل

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

استخدام مثير للاهتمام لـ array_flip!

هل كانت مفيدة؟

المحلول

في إصدار php >= 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 لا يهم، يجب فقط أن يكونوا حاضرين.

نصائح أخرى

هذا هو في الأساس نفس إجابة SilentGhost ولكن قد يكون هذا أسهل وربما أبطأ قليلاً.

array_intersect_key($array, array_flip($wantedKeys));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top