Вот как я получаю элементы из массива в 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;
}
Используйте функцию 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 в противном случае. Если значение найдено в массиве более одного раза, возвращается первый соответствующий ключ.
Я предложу два предложения.
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,
)
В 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;