использование array_search в 1-мерном массиве прост
$array = array("apple", "banana", "cherry"); $searchValue = "cherry"; $key = array_search($searchValue, $array); echo $key;
но как насчет многомерного массива?
#RaceRecord [CarID] [ColorID] [Position] [0] 1 1 3 [1] 2 1 1 [2] 3 2 4 [3] 4 2 2 [4] 5 3 5
например, я хочу получить индекс автомобиля, чья позиция равна 1. Как мне это сделать?
function find_car_with_position($cars, $position) { foreach($cars as $index => $car) { if($car['Position'] == $position) return $index; } return FALSE; }
В php 5.5.5 и более поздних версиях вы можете попробовать это
$array_subjected_to_search =array( array( 'name' => 'flash', 'type' => 'hero' ), array( 'name' => 'zoom', 'type' => 'villian' ), array( 'name' => 'snart', 'type' => 'antihero' ) ); $key = array_search('snart', array_column($array_subjected_to_search, 'name')); var_dump($array_subjected_to_search[$key]);
рабочий образец: http://sandbox.onlinephpfunctions.com/code/19385da11fe0614ef5f84f58b6dae80bd216fc01
Документацию о array_column можно найти здесь
Вы можете попробовать это
array_search(1, array_column($cars, 'position'));
Ура для однострочных!
$index = array_keys(array_filter($array, function($item){ return $item['property'] === 'whatever';}))[0];
Я в основном «воссоздал» метод underscore.js findWhere, за который нужно умереть.
Функция:
function findWhere($array, $matching) { foreach ($array as $item) { $is_match = true; foreach ($matching as $key => $value) { if (is_object($item)) { if (! isset($item->$key)) { $is_match = false; break; } } else { if (! isset($item[$key])) { $is_match = false; break; } } if (is_object($item)) { if ($item->$key != $value) { $is_match = false; break; } } else { if ($item[$key] != $value) { $is_match = false; break; } } } if ($is_match) { return $item; } } return false; }
Пример:
$cars = array( array('id' => 1, 'name' => 'Toyota'), array('id' => 2, 'name' => 'Ford') ); $car = findWhere($cars, array('id' => 1));
или
$car = findWhere($cars, array( 'id' => 1, 'name' => 'Toyota' ));
Я уверен, что этот метод может легко уменьшить LOC. Я немного устал. :П
на самом деле все функции массива предназначены для массива с одним измерением. Вам всегда нужно помнить, что вы применяете его в одномерном массиве.
function find_car_with_position($cars, $position) { for($i=0;$i<count($cars);$i++){ if(array_search($search_val, $cars[$i]) === false){ // if value not found in array..... } else{ // if value is found in array.... } } }