Я исхожу из фона Javascript, и я пытаюсь использовать array_filter()
, но он работает совсем иначе, чем JS.
Взяв этот JS пример:
const people = [
{
name: 'Will',
username: 'will',
},
{
name: 'Alex',
username: 'alex',
},
{
name: 'Abraham',
username: 'abraham',
},
];
const usernameToFind = 'abraham';
const found = people.filter(person => person.username === usernameToFind);
console.log(found[0]); // index 0
// {
// name: 'Abraham',
// username: 'abraham'
// }
Я ожидаю, что все имена пользователей будут разными, поэтому он всегда будет возвращать только одно значение. Поэтому, если я хочу получить доступ к найденной информации, я просто прошу индекс 0
.
On PHP:
<?php
$people = [
[
'name' => 'Alex',
'username' => 'alex',
],
[
'name' => 'Will',
'username' => 'will',
],
[
'name' => 'Abraham',
'username' => 'abraham',
],
];
$usernameToFind = 'abraham';
$found = array_filter($people, function($person) use ($usernameToFind) {
return $person['username'] === $usernameToFind;
});
print_r($found);
// Array
// (
// [2] => Array
// (
// [name] => Abraham
// [username] => abraham
// )
// )
Итак, моя проблема: я получаю массив с индексом найденного элемента, но я не знаю, что это за индекс.
Я видел этот вопрос, но он совсем другой: PHP array_filter, чтобы получить только одно значение из массива .
Я не использую array_search()
, потому что моя стрелка для поиска имеет глубину 2 или 3 уровня, например:
array_filter($people, function ($person) use ($cityToFind) {
return $person['location']['city'] === $cityToFind;
}
Я могу использовать a для l oop, но я действительно вместо этого хотел использовать фильтр. Заранее спасибо!