2013-09-17 6 views
-2

У меня есть массив:Найти в массиве по идентификатору

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [email] => [email protected] 
      [fullname] => name1 
      [phone] => phone 
     ) 
    [1] => Array 
     (
      [id] => 2 
      [email] => [email protected] 
      [fullname] => name2 
      [phone] => phone 
     ) 
    [2] => Array 
     (
      [id] => 40 
      [email] => [email protected] 
      [fullname] => namex 
      [phone] => phone 
     ) 
) 

Как вернуть массив по идентификатору с помощью PHP?

Например: id = 40; Возврат:

[id] => 40 
[email] => [email protected] 
[fullname] => namex 
[phone] => phone 

Спасибо.

+3

Если вы хотите найти массив с помощью 'id', почему не лет u используйте ключ 'id' для массива? – Sirko

+0

Вы можете отсортировать массив по ID, а затем использовать двоичный поиск, чтобы найти нужный элемент. Или вы можете использовать идентификатор в качестве ключа для создания хэш-карты, если вы не будете поддерживать дубликаты. Вы также можете просто перебрать весь массив и искать элемент с нужным идентификатором. – crush

ответ

3
$return = 0; 
foreach($array as $row) { 
    if (40 == $row['id']) { 
     $return = $row; 
     break; 
    } 
} 

var_dump($return); 
+2

+1 для перерыва :) –

0

Сделайте что-то вроде этого, его просто псевдокод.

$matchId = 40; 
foreach($array as $key => $each){ 
    if($each['id'] == $matchId){ 
     $result = $array[$key]; 
    } 
} 
return $result; 
+2

Вы должны «ломать» foreach, когда найдете результат; как это сделал Александр в ответ. –

3

Создать функцию для этого, как показано ниже,

function arraysearch($array, $id) 
{ 
    foreach($array as $key => $value) 
    { 
     if ($value['id'] == $id) { 
     return $key; 
     } 
    } 
    return false; 
} 

И называют его, как показано ниже,

arraysearch($yourarray, 40); 
+0

и почему так голосует –

+0

@AmalMurali Нет, эта функция перезапускает FALSE, если не найдено ни одной записи с данным идентификатором; это хорошая реализация. – feeela

-1

Попробуйте

$data=your array; 
foreach($data as $key=>$each) 
{ 
    if($each['id']=="40") 
    { 
     return $data[$key]; 
    } 
} 

я дал статический пример здесь ,

0

Это фрагмент из класса, реализующие interface \Iterator, это может быть отредактирован, чтобы работать с любыми массивами, если $this->data заменяется матрицей (может быть от третьего аргумента):

/** 
* Find an item by one of it's properties from the internal data array. 
* 
* @param string $property 
* @param mixed $value 
* @return mixed Return NULL if no matching item was found; return FALSE if no such property exists. 
*/ 
public function getByProperty($property, $value) 
{ 
    reset($this->data); 
    $anArrayEntryFromData = current($this->data); 
    if(!isset($anArrayEntryFromData[$property])) 
    { 
     /* there is no such $property */ 
     throw new \UnexpectedValueException(sprintf('%s::%s() – There is no property "%s" in the internal data array for this collection. The available properties for this collection are: %s', get_called_class(), __FUNCTION__, $property, implode(', ', array_keys($anArrayEntryFromData)))); 
    } 

    foreach($this->data as $valueArray) 
    { 
     if(is_scalar($value) && !is_numeric($value)) 
     { 
      if(strtolower($valueArray[$property]) == strtolower($value)) 
      { 
       return $valueArray[$property]; 
      } 
     } 
     else 
     { 
      if($valueArray[$property] == $value) 
      { 
       return $valueArray[$property]; 
      } 
     } 
    } 

    return null; 
} 

Использование:

$iterator->getByProperty('id', 40); 
0

Try:

$array = array (
    "0" => array 
     (
      "id" => "1", 
      "email" => "[email protected]", 
      "fullname" => "name1", 
      "phone" => "phone" 
     ), 
    "1" => array 
     (
      "id" => 2, 
      "email" => "[email protected]", 
      "fullname" => "name2", 
      "phone" => "phone" 
     ), 
    "2" => array 
     (
      "id" => 40, 
      "email" => "[email protected]", 
      "fullname" => "namex", 
      "phone" => "phone" 
     ) 
); 


$id = 40; 
print_r(getArray($array, $id)); 

function getArray($array, $id) 
{ 
    $result = array(); 
    foreach($array as $key => $value){ 
     if($value['id'] == $id){ 
      $result = $value; 
        break; 
     } 
    } 
    return $result; 
} 
Смежные вопросы