2012-01-20 31 views
12

Ví dụ, tôi có mảng đa chiều như sau:Nhận khóa của mảng đa chiều?

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

Làm thế nào tôi có thể nhận được chìa khóa của array(0,1,2,3,4,5,6)?

Tôi đã thử rất nhiều ví dụ, nhưng không có gì có hiệu quả đối với tôi.

Trả lời

12

này khá đơn giản, bạn chỉ cần sử dụng array_keys():

$keys = array_keys($array); 

See it working

EDIT Đối với nhiệm vụ tìm kiếm của bạn, điều này chức năng nên thực hiện công việc:

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

Tham số thứ tư $strict, nếu TRUE, sẽ sử dụng so sánh loại nghiêm ngặt. Vì vậy, 9 sẽ không hoạt động, bạn sẽ phải vượt qua '9', vì các giá trị được lưu trữ dưới dạng chuỗi. Trả về khóa của lần xuất hiện đầu tiên của một trận đấu, NULL nếu không tìm thấy giá trị hoặc FALSE do lỗi. hãy đảm bảo sử dụng so sánh nghiêm ngặt về giá trị trả lại, vì 0, NULLFALSE là tất cả giá trị trả lại có thể và tất cả đều sẽ đánh giá là 0 nếu sử dụng so sánh số nguyên không.

+1

Có, nó hoạt động, nhưng , tôi cần phải tìm kiếm trong mảng ví dụ id = 9, và nhận được id trả về của mảng mảng, trong đó id = 9 –

+0

@ JurijsGuščins Xem chỉnh sửa ở trên. – DaveRandom

+0

Hoạt động hoàn hảo. Thực sự lớn thanx :) –

0

Bạn có nghĩa là một cái gì đó như thế này:

 

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

 
+0

Tôi nghĩ rằng tôi đã không giải thích rõ tình hình của tôi. Ví dụ, tôi đang tìm mảng trong đó id = 9 và tôi cần một khóa mảng trong đó 9, nó sẽ là 0, nếu tôi sẽ tìm id ở đâu 8, tôi sẽ nhận được 1 –

2

Hãy thử điều này, tôi nghĩ rằng nó sẽ giúp bạn .

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

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