كيفية البحث عن صفيف قيم متعددة في PHP؟
-
06-07-2019 - |
سؤال
وأنا بحاجة للحصول على المفاتيح من القيم التي تكون مكررة. حاولت استخدام array_search والتي عملت على ما يرام، ولكن أنا فقط حصلت على القيمة الأولى كما ضرب.
وأنا بحاجة للحصول على كل المفاتيح من القيم المكررة، في هذه الحالة 0 و2. إخراج نتيجة البحث ك مجموعة ستكون جيدة.
هل هناك وظيفة PHP للقيام بذلك أو هل أنا بحاجة لكتابة بعض حلقات متعددة للقيام بذلك؟
$list[0][0] = "2009-09-09";
$list[0][1] = "2009-05-05";
$list[0][2] = "2009-09-09";
$list[1][0] = "first-paid";
$list[1][1] = "1";
$list[1][2] = "last-unpaid";
echo array_search("2009-09-09",$list[0]);
المحلول
array_keys مع قيمة البحث
array_keys($list[0], "2009-09-09");
والذي سيعود مجموعة من مفاتيح مع القيمة المحددة، في قضيتك [0، 2]. إذا كنت ترغب في العثور على التكرارات وكذلك، يمكنك إجراء أول تمريرة مع array_unique ، ثم أعاد على أن مجموعة باستخدام array_keys على الأصل. أي شيء بإرجاع مجموعة من طول> 1 مكرر، والنتيجة هي مفاتيح التي يتم تخزين التكرارات. شيء من هذا القبيل ...
$uniqueKeys = array_unique($list[0])
foreach ($uniqueKeys as $uniqueKey)
{
$v = array_keys($list[0], $uniqueKey);
if (count($v) > 1)
{
foreach ($v as $key)
{
// Work with $list[0][$key]
}
}
}
نصائح أخرى
في array_search()
يمكننا أن نقرأ:
إذا تم العثور على إبرة في كومة قش أكثر
من مرة، ومفتاح التصفح الأول
عاد. لإرجاع مفاتيح لجميع
قيم مطابقة، استخدم array_keys()
مع
المعلمة search_value
اختياري
بدلا من ذلك.
والتركيبة التالية من المكالمات وظيفة سوف أعطيك كل القيم المكررة:
$a = array(1, 1, 2, 3, 4, 5, 99, 2, 5, 2);
$unique = array_unique($a); // preserves keys
$diffkeys = array_diff_key($a, $unique);
$duplicates = array_unique($diffkeys);
echo 'Duplicates: ' . join(' ', $duplicates) . "\n"; // 1 2 5
ويمكنك تحقيق ذلك باستخدام array_search()
باستخدام while
حلقة والحل التالي:
while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
<سوب> المصدر: جديلة في openxbox في php.net سوب>
لواحد ومتعددة الأبعاد مجموعة، قد استخدم الدالة التالية لتحقيق ذلك (كبديل ل array_keys()
):
function array_isearch($str, $array){
$found = array();
foreach ($array as $k => $v) {
if (strtolower($v) == strtolower($str)) {
$found[] = $k;
}
}
return $found;
}
<سوب> المصدر: robertark، php.net سوب>
ووPHP الدول اليدوية في Return Value
قسم الوثائق وظيفة array_search()
التي يمكنك استخدامها array_keys()
أ > لتحقيق ذلك. تحتاج فقط إلى توفير المعلمة الثانية:
$keys = array_keys($list[0], "2009-09-09");