Php 从关联数组中获取特定的键/值,并将其存储为变量

Php 从关联数组中获取特定的键/值,并将其存储为变量,php,arrays,associative-array,Php,Arrays,Associative Array,我需要使用foreach循环访问关联数组的特定键/值作为变量。获取数组中所有数据的键/值对不是问题。问题在于获取特定的键/值。以下面的代码为例 <?php $data = [ 'person1' => [ 'id' => 101, 'firstName' => 'John', 'LastName' => 'Smith' ], 'p

我需要使用
foreach
循环访问关联数组的特定
键/值作为变量。获取
数组中所有数据的
键/值
对不是问题。问题在于获取特定的
键/值
。以下面的代码为例

<?php

$data = [

    'person1' => 
        [
            'id' => 101,
            'firstName' => 'John',
            'LastName' => 'Smith'

        ],

        'person2' => 
        [
            'id' => 102,
            'firstName' => 'Mary',
            'LastName' => 'Smart'

        ]

];
上面的代码不是我想要的。 我想获取特定的
键/值
例如,我只想获取
id
s的键/值

所以我试过这样的方法:

$specificId = null;
foreach($data as $firstKey => $firstValue){
    foreach ($firstValue as $secondKey => $secondValue) {
        if($secondKey == 'id'){ // using if statement to get key/value pair of person's id
            $specificId = $secondValue; //storing the specific ids as variable
            echo $secondKey . ": ". $specificId . "<br>"; 

        }

    }
}


?>
$specific id=null;
foreach($firstKey=>$firstValue的数据){
foreach($firstValue作为$secondKey=>$secondValue){
if($secondKey=='id'){//使用if语句获取人员id的键/值对
$specificId=$secondValue;//将特定ID存储为变量
echo$secondKey.:“$specificId.”
“; } } } ?>
上面的代码似乎有效,但如果我还想只为
firstName
获取
key/value
,那么我必须编写另一个
if
语句。 我将在
foreach
循环中编写这么多
if
语句。您知道另一种方法可以编写更少的代码来获得特定的
键/值对吗


有许多类似的问题,像我一样,但我寻找的答案不是这些问题的目的

array\u intersect\u键应该可以很好地完成这项工作:

$results=[];
foreach($data as $name => $attriubtesPerson)
{
    $results[$name] = array_intersect_key($attributesPerson, ['id' => null, 'firstName' => null]);
}
可以在foreach($firstKey=>$firstValue)中找到文档{ 回显数组_键($firstValue,$firstValue['id'])[0]。:'。$firstValue['id'].
'; 回显数组_键($firstValue,$firstValue['firstName'])[0]。:'。$firstValue['firstName'].
'; }
您可以从数组中调用关联数组键

这将输出键和值


要访问特定的键值,需要将数组转换为Json,并像普通对象一样访问它

$data=[
“person1”=>
[
'id'=>101,
“名字”=>“约翰”,
“姓氏”=>“史密斯”
],
“person2”=>
[
“id”=>102,
“名字”=>“玛丽”,
'LastName'=>'Smart'
]
];
$obj=json_解码(json_编码($data));
//直接访问key=值
echo$obj->person1->firstname;
//仅访问所有firstname
foreach($obj作为$o){
echo$o->firstName;

}
我不明白这个问题。是否要将每个值存储在单个变量中?那么,除了对每个密钥进行条件检查之外,还有什么(安全的)选择呢?既然可以直接在数组中引用,为什么要将每个数组值复制到一个单独的变量中呢?嗯@Matt S,我想我可以得到一个变量来存储每个值。例如,
$secondValue
的方式就包含多个值。但现在看来,用一个变量来保存多个值是不理想的。此外,我还将每个数组值复制到一个变量中,因为我计划在
if
语句之外使用该变量,如果可能的话,“我想我可以得到一个变量来存储每个值。”是的,这称为数组。没有理由不能在
if
之外引用
$data
数组或其中的子数组。在我的OP示例中,如果在
if
语句之外回显
$specific id
,它只输出一个值,这是最后一个值,因为第一个值被第二个值覆盖。例如,
$specific Id
if
语句中输出两个
Id
101
102
,但仅在
if语句
之外输出
102
,虽然这已经得到了回答,但我想知道,为什么不能简单地使用内部数组,因为它是数组?我的意思是,如果您想与特定id进行比较,只需执行:
if($firstValue['id']=$specific id){…
完全跳过内部循环。您好@Transitive,谢谢您的响应,但我不知道
array\u intersect\u key
如何在这种情况下正常工作array\u intersect\u key返回第一个输入数组中的键与第二个输入数组中的任何值相同的所有值。这意味着您不需要使用mul进行分支使用if子句只是为了检查一个键是否存在,然后对它们执行逻辑。现在,您可以列出所有要从数组中提取的键,并在结果集中执行逻辑。您在答案中提供的示例输出两个空数组。您能检查并编写一个示例,很好地演示您所说的吗?我很好rry,我犯了一个错误,没有将键相互比较。它将键值彼此相交,而不是第二个数组输入的值。很抱歉,我编辑了上面的代码片段。谢谢。这将为我们提供
键如何
。如果您不知道,我需要
键他
value`你想把键也当作变量吗?@bityo kazi,yesI更新了我的答案。看看它是否符合你的目的@PrinceBrucexYes,太棒了。谢谢
$results=[];
foreach($data as $name => $attriubtesPerson)
{
    $results[$name] = array_intersect_key($attributesPerson, ['id' => null, 'firstName' => null]);
}
foreach($data as $firstKey => $firstValue) {
       echo array_keys($firstValue, $firstValue['id'])[0].': '.$firstValue['id'].'</br>';
       echo array_keys($firstValue, $firstValue['firstName'])[0].': '.$firstValue['firstName'].'</br>';
}