2012-01-20 28 views
12

Na przykład, mam tablicę wielowymiarową jak poniżej:Zdobądź klucz wielowymiarowej tablicy?

$array = array (
    0 => 
    array (
     'id' => '9', 
     'gallery_id' => '2', 
     'picture' => '56475832.jpg' 
    ), 
    1 => 
    array (
     'id' => '8', 
     'gallery_id' => '2', 
     'picture' => '20083622.jpg' 
    ), 
    2 => 
    array (
     'id' => '7', 
     'gallery_id' => '2', 
     'picture' => '89001465.jpg' 
    ), 
    3 => 
    array (
     'id' => '6', 
     'gallery_id' => '2', 
     'picture' => '47360232.jpg' 
    ), 
    4 => 
    array (
     'id' => '5', 
     'gallery_id' => '2', 
     'picture' => '4876713.jpg' 
    ), 
    5 => 
    array (
     'id' => '4', 
     'gallery_id' => '2', 
     'picture' => '5447392.jpg' 
    ), 
    6 => 
    array (
     'id' => '3', 
     'gallery_id' => '2', 
     'picture' => '95117187.jpg' 
    ) 
); 

Jak mogę uzyskać klucz array(0,1,2,3,4,5,6)?

Próbowałem wiele przykładów, ale nic się nie pracował dla mnie.

Odpowiedz

12

To dość proste, wystarczy użyć array_keys():

$keys = array_keys($array); 

See it working

EDIT Dla zadania wyszukiwania, to funkcja powinna wykonać zadanie:

function array_search_inner ($array, $attr, $val, $strict = FALSE) { 
    // Error is input array is not an array 
    if (!is_array($array)) return FALSE; 
    // Loop the array 
    foreach ($array as $key => $inner) { 
    // Error if inner item is not an array (you may want to remove this line) 
    if (!is_array($inner)) return FALSE; 
    // Skip entries where search key is not present 
    if (!isset($inner[$attr])) continue; 
    if ($strict) { 
     // Strict typing 
     if ($inner[$attr] === $val) return $key; 
    } else { 
     // Loose typing 
     if ($inner[$attr] == $val) return $key; 
    } 
    } 
    // We didn't find it 
    return NULL; 
} 

// Example usage 
$key = array_search_inner($array, 'id', 9); 

Czwarty parametr $strict, jeśli TRUE, użyje ścisłych porównań typów. Tak więc 9 nie będzie działać, musisz przejść '9', ponieważ wartości są przechowywane jako ciągi. Zwraca klucz od pierwszego wystąpienia meczu, NULL jeżeli wartość nie zostanie znaleziony, lub FALSE błędu. upewnij się, aby użyć ścisłe porównanie na wartości zwracanej, ponieważ 0, NULL i FALSE są wszystkie możliwe wartości zwracane i będą wszystko ocenić na 0 przypadku korzystania luźne porównanie całkowitych.

+1

Tak to działa, ale muszę szukać w tablicy na przykład id = 9 i uzyskać powrócić identyfikator klucza tablicy, gdzie jest id = 9 –

+0

@ JurijsGuščins Zobacz zmienił powyżej. – DaveRandom

+0

Działa idealnie. Naprawdę wielki thanx :) –

0

Masz na myśli coś takiego:

 

function getKeys($array) 
{ 
    $resultArr = array(); 
    foreach($array as $subArr) { 
     $resultArr = array_merge($resultArr, $subArr); 
    }   
    return array_keys($resultArr); 
} 

 
+0

Myślę, że nie wyjaśniłem dobrze mojej sytuacji. Na przykład, szukam tablicy gdzie id = 9, a ja potrzebuję klucz tablicy, która wheres 9, byłoby 0, jeśli będę szukał Gdzie id 8, i dostanie 1 –

2

Spróbuj to, myślę, że to pomoże .

foreach ($array as $key=>$value) 
{ 
    echo $key.'<br/>'; 

    echo $value['id'].'<br/>'; 
    echo $value['gallery_id'].'<br/>'; 
    echo $value['picture'].'<br/><br/>'; 
} 
Powiązane problemy