这很令人头疼。
我有两个阵列;
$array_1 = Array
(
[0] => Array
(
[id] => 1
[name] => 'john'
[age] => 30
)
[1] => Array
(
[id] => 2
[name] => 'Amma'
[age] => 28
)
[2] => Array
(
[id] => 3
[name] => 'Francis'
[age] => 29
)
)
另一个数组
array_2 = = Array
(
[0] => Array
(
[id] => 2
[name] => 'Amma'
)
)
如何判断$array_2
的ID和名称与$array_1[1
]的ID和名称相同并返回$array_1[1]['age']
?
由于
答案 0 :(得分:3)
foreach($array_1 as $id=>$arr)
{
if($arr["id"]==$array_2[0]["id"] AND $arr["name"]==$array_2[0]["name"])
{
//Do your stuff here
}
}
答案 1 :(得分:3)
嗯,你可以在一个简单的循环中完成它。我将编写一个函数,它将$ array_2中的FIRST元素与$ array_1中的某些元素匹配并返回'age':
function getField($array_1, $array_2, $field)
{
foreach ($array_2 as $a2) {
foreach ($array_1 as $a1) {
$match = true;
foreach ($a2 as $k => $v) {
if (!isset($a1[$k]) || $a1[$k] != $a2[$k]) {
$match = false;
break;
}
}
if ($match) {
return $a1[$field];
}
}
}
return null;
}
答案 2 :(得分:2)
使用array_diff()。
在我看来,使用array_diff()是一种比仅仅比较特定键更通用的解决方案。
Array_diff()返回一个新数组,该数组表示第一个数组中存在的所有条目,并且不存在于第二个数组中。
由于你的第一个数组包含3个键,而seconds数组包含2个键,当有2个匹配时,array_diff()将返回一个包含额外键(年龄)的数组。
foreach ($array_1 as $arr) {
if (count(array_diff($arr, $array_2[1])) === 1) {//meaning 2 out of 3 were a match
echo $arr['age'];//prints the age
}
}
希望这有帮助!
答案 3 :(得分:1)
我假设您要查找已知id
和name
的人的年龄。
这将有效:
foreach ($array_1 as $val){
if($val['id']==$array_2[0]['id'] && $val['name']==$array_1[0]['name']){
$age = $val['age'];
}
}
echo $age;
答案 4 :(得分:0)