2017-02-14 37 views
2

我正在学习PHP,我正在寻找一个给定的字符串搜索数组,并返回一些值,如果它匹配。我曾尝试使用in_array()array_search,但两者都无法正确匹配/返回值。检查一个字符串的2D关联数组,返回信息(PHP)

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()列出信息的任何反馈将不胜感激。

回答

2

你可以试试这个 -

$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

+0

完美!谢谢@Sougata Bose为您的快速回复和解释每一步如何工作,这对像我这样的初学者非常有用:) – Ben

+0

是否也可以继续搜索另一个同名实例? 如果搜索$ name ='Z'并且存在Z的两个实例,您是否可以显示两个实例的信息? '2'=>数组 ( '名称'=> 'Z', '年龄'=> 50, '位置'=> '日', ) '999'=>数组 ( 'name'=>'Z', 'age'=> 99, 'location'=>'Finland', ) Z was found!他们的年龄是:50,总部设在:日本 Z被发现!他们的年龄是:99,他们的总部设在:芬兰 – Ben

+1

在这种情况下,您必须使用循环并取消第一个发现 –

相关问题