2013-09-16 7 views
0

В принципе у меня есть этот массив:Найти индекс в многомерном массиве

array(
    [0] => array("id" => "0", "header" => "img1"), 
    [1] => array("id" => "4", "header" => "img4") 
    [2] => array("id" => "6", "header" => "img6") 
) 

Если у меня есть $ ID = «4», как я могу извлечь индекс [1], чтобы получить «заголовок» значение?

ответ

1

Вы хотите сделать петлю Еогеасп для этого. Но, честно говоря, если бы вы структурировали индексы массива лучше, чем просто до простого теста isset, а затем захватите значение, как только вы подтвердите его.

Правильный путь:

$headers = array(0 => 'img1', 4 => 'img4', 6 => 'img6'); 

if (isset($headers[$index])) { 
    return $headers[$index]; 
} 

Вот как бороться с ней с помощью массива (гораздо более дорогостоящим с перерабатывающего точки зрения):

$headers = array(
    0 => array("id" => "0", "header" => "img1"), 
    1 => array("id" => "4", "header" => "img4"), 
    2 => array("id" => "6", "header" => "img6") 
); 

foreach ($headers AS $value) { 
    if ($value['id'] == $index) { 
    return $value['header']; 
    } 
} 
+0

Где $ index - идентификатор, который вы хотите использовать. – pthurmond

+0

Не удается получить только значение 0, 1 или 2? – Xriuk

+0

Конечно, если у вас есть способ узнать, какой индекс тянуть/использовать, то на самом деле не имеет значения, что такое индекс. – pthurmond

0
foreach ($array as $key => $value) { 
    if ($value['id'] == '4') { 
     echo $value['header']; 
     break; 
    } 
} 

Это будет лучше хранить id и header, как это, например:

array(
    "0" => "img1", 
    "4" => "img4", 
    "6" => "img6", 
); 
+0

Lol, мы буквально сделали примерно то же самое. – pthurmond

+0

Я не могу/не хочу изменять структуру, идентификаторы и заголовки из базы данных. – Xriuk

0

Массивы в PHP являются на самом деле хэш-таблицы позади сцены, поэтому доступ к элементам по клавише очень быстрый. Если можно, измените способ создания массива в источнике, чтобы использовать id (который, как я полагаю, уникален) как ключ, как уже упоминалось в других ответах.

Чтобы превратить ваш текущий массив индексируется id, вы могли бы использовать этот код:

$indexed = array(); 
foreach($array as $element) { 
    $indexed[$element['id']] = $element['header']; 
} 
// $indexed now resembles id => header 

Вы можете получить доступ header значения в постоянная время, используя $indexed[$id].

Смежные вопросы