相当于PHP中的JavaScript findIndex()

时间:2018-02-19 13:10:46

标签: javascript php arrays indexof

这就是我在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;
}

3 个答案:

答案 0 :(得分:1)

使用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 :(得分:0)

在PHP中,有一个数组函数cp libgurobi_c++.a ../../lib/,它匹配其键的值和返回值。它需要array_serach()作为第一个参数,search value作为第二个参数。

array

答案 2 :(得分:0)

我会提出两点建议。

  1. 对foreach循环方法进行一些调整。
  2. array_search()array_column()
  3. 的组合

    通过内联评论进行一些解释。

    代码:(Demo

    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,
    )