Перейти к содержимому

Как найти значение в массиве php

  • автор:

Как найти значение в массиве по другому полю

Есть массив с данными, в нем поля id , code , name мне известно значение code и по этому значению, я хочу вернуть из массива значение id , как это сделать? Ну например в sql : select id from someArray where code = ‘somecode’; Как из массива выдернуть так же значение id ?

Отслеживать
задан 14 мар 2018 в 11:13
Winteriscoming Winteriscoming
2,347 1 1 золотой знак 21 21 серебряный знак 49 49 бронзовых знаков
Приведите пример массива
Commented 14 мар 2018 в 12:02

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Можно извлечь столбец code из массива, найти в нем нужный элемент, и взять id по соовтетствюущему индексу

$data = [ . ]; $needle = "find-me"; $idx = array_search($needle, array_column($data, 'code')); $result = $data[$idx]['id']; 

можно банально узнать то же самое в цикле

foreach($data as $d) < if($d['id'] == $needle)< $result = $d['id']; break; >> 

Или вараант с array_reduce , хотя он менее удобен и менее эффективен

$id = array_reduce($data, function($res, $item) use ($needle)< if($res) return $res; if($item['code'] == $needle) return $item['id']; >, null); 

Найти значение по ключу и изменить значение в массиве

Но так и не выходит изменить значение. Подскажите, что делаю не так?

Отслеживать

задан 2 дек 2018 в 14:43

Denis640Kb Denis640Kb

14.1k 5 5 золотых знаков 22 22 серебряных знака 46 46 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

$json = '< "id": 2, "firstName": "Тест", "lastName": "Тест", "patronymic": "Тест", "sexId": 101252, "mobilePhone": "71111111111", "registrationNumber": < "id": 6, "seria": "", "no": "", "extraNumber": "", "issueDate": null, "closeDate": null, "manager": "", "subdivisionCode": "", "complementaryDocTypeId": null >, "personRelatives": [ < "id": 4, "lastName": "dsv", "firstName": "sd", "patronymic": "", "resident": false, "passport": < "id": 43, "seria": "", "no": "", "extraNumber": null, "issueDate": null, "closeDate": null, "manager": "", "subdivisionCode": "", "complementaryDocTypeId": null >, "rnn": "", "telephone": "", "email": "", "workPlace": "", "address": "", "birthDate": null, "collateralRelId": 102147, "verified": null, "comments": "" > ], "clientRiskStatus": [ < "id": 5, "insertDate": 1539244552517, "userId": 1027, "comments": "3211", "valueId": 102184 >, < "id": 8, "insertDate": 1540396776913, "userId": 1027, "comments": "321", "valueId": 102184 >, < "id": 9, "insertDate": 1540397890848, "userId": 1027, "comments": "123", "valueId": 102184 >, < "id": 10, "insertDate": 1540398177463, "userId": 1027, "comments": "вшозавц", "valueId": 102184 >, < "id": 11, "insertDate": 1540398590878, "userId": 1027, "comments": "авлоавыолз", "valueId": 102184 >, < "id": 2, "insertDate": 1539067291379, "userId": 1027, "comments": "Новый клиент", "valueId": 102185 >], "extraFields": [ < "id": 178, "key": "placeOfEducation", "value": "kzt1" >, < "id": 179, "key": "work1", "value": "workk1" >, < "id": 180, "key": "work2", "value": null >, < "id": 181, "key": "work3", "value": null >, < "id": 182, "key": "placeOfEducation1", "value": "kzt1" >, < "id": 183, "key": "work6", "value": "" >]>'; $json = json_decode($json, true); 
var_dump($json['extraFields']); foreach($json['extraFields'] as $key => $val) < if($val['key'] == "work1")< // находим нужный ключ $json['extraFields'][$key]['value'] = 'new your value'; // меняем значение на нужное в исходном массиве >> var_dump($json['extraFields']); 
 //было [1]=> array(3) < ["id"]=>int(179) ["key"]=> string(5) "work1" ["value"]=> string(6) "workk1" > // стало [1]=> array(3) < ["id"]=>int(179) ["key"]=> string(5) "work1" ["value"]=> string(14) "new your value" > 

Поиск по значению в массиве

Если операция поиска одноразовая, то можно использовать варианты поиска, приведенные в других ответах.
Если же вам нужно обращаться ко множеству элементам по ID, то лучше перевести массив к виду ID => name , чего можно добиться простым использованием

$data = array_column($array, 'name', 'id'); print $data[39]; 

в случае, если у вас там будет не только name и и другие данные, можно дополнительно использовать array_combine :

$data = array_combine(array_column($array, 'id'), $array); 

тогда фактически ключи будут заменены на значения ID .

Как найти значение в php массиве

Встроенная функция array_search() принимает в качестве аргументов искомое значение и массив, а возвращает индекс первого найденного элемента. Таким образом, потом мы можем использовать этот индекс, чтобы получить сам элемент.

 $collection = ['hexlet', 'is', 'awesome']; $index = array_search('awesome', $collection); // 2 $item = $collection[$index]; print_r($item); //=> 'awesome' 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *