【问题标题】:Check a 2D associated array for a string, return the information (PHP)检查二维关联数组中的字符串,返回信息(PHP)
【发布时间】:2017-07-02 08:19:37
【问题描述】:

我正在学习 PHP,我希望在数组中搜索给定的字符串,如果匹配则返回一些值。我尝试过使用in_array()array_search,但两者都无法正确匹配/返回值。

print_r($names);

Array
(
    [0] => Array
        (
            [name] => A
            [age] => 42
            [location] => Australia
        )

    [1] => Array
        (
            [name] => B
            [age] => 21
            [location] => France
        )

    [2] => Array
        (
            [name] => Z
            [age] => 50
            [location] => Japan
        )
)

我想检查数组中是否存在名称并返回相同索引位置的信息。

$name="A";
if (in_array($name, $names)) {
    $age=$names['age'];
    $location=$names['location'];
    echo "$name was found! Their Age is: $age, They are based in: $location";
}
else{
    echo"$name was not found";
}

但是,找不到名称,也没有加载年龄和位置数据。

输出:

A was not found

预期输出:

A was found! Their Age is: 42, They are based in: Australia

使用 array_search() 进行测试

$result = array_search("$name",$names);
echo $result;

没有打印任何值。

任何关于如何修复我的(in_array) 或我将如何使用array_search() 列出信息的反馈将不胜感激。

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    你可以试试这个——

    $position = array_search($name, array_column($your_array, 'name'));
    $info = $your_array[$position];
    

    说明

    array_column($your_array, 'name')
    

    将返回具有相应索引的所有名称的数组。

    array_search($name, array_column($your_array, 'name'))
    

    将返回找到名称的索引。

    $info = $your_array[$position]
    

    将特定的子数组存储在$info

    所以应该是这样的——

    echo $info['name'] . " was found! Their Age is: " . $info['age'] . ", They are based in: " . $info['location'];
    

    array_column() & array_search()

    Working code

    【讨论】:

    • 完美!感谢@Sougata Bose 的快速回复和解释每个步骤的工作原理,这对像我这样的初学者非常有帮助:)
    • 是否还可以继续搜索另一个同名实例?如果搜索 $name = 'Z' 并且存在两个 Z 实例,您可以显示两个实例的信息吗? '2' => 数组 ('name' => 'Z', 'age' => 50, 'location' => 'Japan', ), '999' => array ('name' => 'Z', 'age' => 99, 'location' => 'Finland', ) Z 找到了!他们的年龄是:50,他们的基地是:日本 Z 被发现了!他们的年龄是:99,他们居住在:芬兰
    • 在这种情况下,您必须使用循环并取消设置第一个结果
    • 谢谢@Sougata Bose 我会提前给的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多