سؤال

وأنا بحاجة للحصول على المفاتيح من القيم التي تكون مكررة. حاولت استخدام 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

scroll top