эквивалент JavaScript findIndex () в переполнении стека

Вот как я получаю элементы из массива в JavaScript, он работает нормально:

function getLibItemByName(name){
var index = json.library.findIndex(p => p.name == name);
return json.library[index];
}

мой массив как:

[
{
"name": "item1"},
{
"name": "item2"},
...
]

Теперь мне интересно, как я могу сделать то же самое в PHP?

Обновить: Я придумал это, которое работает на данный момент

function getLibItemByName($name){
global $json;
foreach($json['library'] as $key => $val){
if($name === $val['name']){
return $json['library'][$key];
}
}
return false;
}

0

Решение

Используйте функцию array_search (), она работает так:

array_search (what_to_search, array_variable, истина / ложь);

FALSE является параметром по умолчанию.
Если для этого параметра установлено значение TRUE, эта функция будет искать идентичные элементы в массиве.
Когда установлено значение true, число 5 не совпадает со строкой 5.

Вот приведенный пример:

$a=array("a"=>"5","b"=>5,"c"=>"5");
echo array_search(5,$a,true);

Возвращает ключ значения, если оно найдено в массиве, и FALSE в противном случае. Если значение найдено в массиве более одного раза, возвращается первый соответствующий ключ.

1

Другие решения

Я предложу два предложения.

  1. Несколько изменений в вашем методе цикла foreach.
  2. Сочетание array_search() а также array_column()

Несколько объяснений через встроенные комментарии.

Код: (демонстрация)

function getLibItemByName($array,$name){  // avoid global, assign $array as parameter
foreach($array['library'] as $key => $row){
if($name === $row['name']){
return $row;  // return the whole subarray (this is a simpler expression)
}
}
return false;
}

// logically rename json to array
$array=[
'library'=>
[
['name'=>'Alan','age'=>5],
['name'=>'Bert','age'=>6],
['name'=>'Chad','age'=>7],
['name'=>'Doug','age'=>8],
['name'=>'Eddy','age'=>9],
['name'=>'Fred','age'=>10]
]
];

var_export(getLibItemByName($array,'Chad'));
echo "\n---\n";
var_export(getLibItemByName($array,'Greg'));

echo "\n---\n";

if(($index=array_search('Eddy',array_column($array['library'],'name')))!==false){
var_export($array['library'][$index]);
}else{
echo 'No match';
}

Выход:

array (
'name' => 'Chad',
'age' => 7,
)
---
false
---
array (
'name' => 'Eddy',
'age' => 9,
)
0

В PHP есть функция массива array_serach() который соответствует значению и возвращает его ключ. Занимает search value в качестве первого аргумента и array в качестве второго аргумента.

    $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
0
По вопросам рекламы [email protected]