array_key_exists çalışmıyor

3 Cevap php

array_key_exists büyük boyutlu dizi için çalışmıyor. Ex

$arr=array( '1'=>10,
       '2'=>array('21'=>21,
                  '22'=>22,
                  '23'=>array('test'=>100,
                              '231'=>231),
                 ),
       '3'=>30,
       '4'=>40 
      );

array_key_exists ('test', $ dizi) döner 'yanlış ama bazı basit diziler ile çalışır.

3 Cevap

array_key_exists (zaten işaret {[) (0]} gibi) özyinelemeli çalışmıyor. : PHP kılavuzuna bakabilirsiniz, piece of code tekrarlamalı bir arama gerçekleştirmek için kullanabileceğiniz aşağıdaki var

<?php
function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}

array_key_exists multidimensionaml diziler üzerinde çalışmaz. Bunu yapmak istiyorsanız, bu gibi kendi işlevi yazmak zorunda:

function array_key_exists_multi($n, $arr) {
      foreach ($arr as $key=>$val) {
        if ($n===$key) {
          return $key;
        }
        if (is_array($val)) {
          if(multi_array_key_exists($n, $val)) {
            return $key . ":" . array_key_exists_multi($n, $val);
          }
        }
      }
  return false;
}

Bu döndürür false anahtarı bulunamadı veya değilse Eğer bulunursa (2:23:test gibi) o diziye anahtarının "yerini" içeren bir dize.

$test_found = false;
array_walk_recursive($arr,
                     function($v, $k) use (&$test_found)
                     {
                         $test_found |= ($k == 'test');
                     });

Bu PHP 5.3 veya üstü gerektirir.