2013-12-12 2 views
1
Array 
(
    [0] => Array 
     (
      [id] => 61 
      [title] => werwer 
     ) 

    [1] => Array 
     (
      [id] => 63 
      [title] => test 
     ) 

    [2] => Array 
     (
      [id] => 88 
      [title] => test 2 
     ) 
) 

Как я могу получить титул, который имеет id=63 в выше типа массива без зацикливания.как получить другие элементы массива из ассоциативного массива, когда у меня есть уникальное значение массива

+0

'$ array [1] [63]' - попробуйте это. И прочитайте это: http://php.net/manual/en/language.types.array.php – sectus

+0

Если вы действительно хотите ответить на его пример (и только эту точную структуру массива), он все равно будет $ array [1] ['заглавие']. В вашем примере будет доступ к индексу, который не задан. – JustAPirate

ответ

1

Собственно, вы не можете сделать это без цикла. Это не значит, что вы должны использовать цикл (foreach/while e t.c.) - но используя функции массива, вы в любом случае будете внутренне перебирать массив.

Например, в PHP 5.5, который:

$array = [ 
['id'=>63, 'title'=>'foo'], 
['id'=>65, 'title'=>'bar'] 
]; 
//use this - if there are more than 2 connected to `id` fields: 
$ids = array_flip(array_column($array, 'id'));//here is iteration, gathering id column 
$result = $array[$ids[63]]['title']; 
//or else, if `title` is always the only field: 
$result = array_column($array, 'title', 'id')[63]; 
//var_dump($result); 

-И так далее. array_search() с array_walk() (или аналогичными способами) скроет вас от вас, но это будет сделано в любом случае.

+0

спасибо, это можно сделать легко: '$ ids = array_column ($ records, 'title', 'id'); echo $ result = $ ids [63]; ' , но у меня нет PHP 5.5 –

+0

Вы можете использовать [this] (http://stackoverflow.com/questions/18784897/how-can-i-get- массив-of-a-one-type-from-a-multi-dimension-array-without/18784941 # 18784941) для более ранних версий –

-1

Нет способа получить его без цикла, если вы еще не знаете индекс id 63 в массиве.

foreach($array as $element) { 
    if($element['id'] == 63) { 
     echo $element['title']; 
    } 
} 

Вы можете изменить структуру массива:

$array = array(61 => 'werwer', 63 => 'test', 88 => 'test 2'); 

Это приведет:

Array 
(
    [61] => 'werwer' 
    [63] => 'test' 
    [88] => 'test 2' 
) 

Тогда вы могли бы получить доступ к/получить его с $ массив [63]

0

Ну вы можете попробовать некоторые сумасшедшие вещи, как этот

array_search(61, 
    array_combine(
      array_map(function ($a) { 
       return $a['title']; 
      }, $arr), 
      array_map(function ($a) { 
       return $a['id']; 
      }, $arr))); 

, но это очень неэффективно (есть 4 петли 'скрытый' в 2 array_map, array_combine и array_search). Я рекомендую использовать цикл - так же, как @JustAPirate.

$arr = array(array('id' => 61, 'title' => 'werwer'), 
     array('id' => 62, 'title' => 'asdasd'), 
     array('id' => 63, 'title' => 'qweqwe'),); 

function f($arr, $id) { 
    foreach ($arr as $a) { 
     if ($a['id'] == $id) 
      return $a['title']; 
    } 
} 

var_dump(f($arr, 61)); 
Смежные вопросы