从关联数组中获取特定键/值并将它们存储为变量

时间:2018-01-13 13:38:29

标签: php arrays associative-array

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

<?php

$data = [

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

        ],

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

        ]

];

我可以通过以下代码在key/value中获得array对所有数据:

foreach($data as $firstKey => $firstValue){
    foreach ($firstValue as $secondKey => $secondValue) {
        echo $secondKey. ": ". $secondValue . "<br />";


    }
}

上面的代码并不是我想要的。 我希望获得具体的key/value,例如,我只想获得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>"; 

        }

    }
}


?>

上面的代码似乎有效,但如果我还想仅key/value获取firstName,那么我必须编写另一个if语句。 我最终会在if循环中编写这么多foreach个语句。你知道另一种方法我可以编写较少的代码来获得特定的key/value对吗?

有很多像我这样的类似问题但我正在寻找的答案不是任何问题的目标。

3 个答案:

答案 0 :(得分:3)

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>';
}

你可以从数组中调用关联数组键

  

输出键和值

答案 1 :(得分:0)

array_intersect_key应该可以正常工作:

$results=[];
foreach($data as $name => $attriubtesPerson)
{
    $results[$name] = array_intersect_key($attributesPerson, ['id' => null, 'firstName' => null]);
}

文档可以找到here

答案 2 :(得分:0)

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

    $data = [
        'person1' => 
            [
                'id' => 101,
                'firstName' => 'John',
                'LastName' => 'Smith'
            ],
            'person2' => 
            [
                'id' => 102,
                'firstName' => 'Mary',
                'LastName' => 'Smart'
            ]
    ];
    $obj = json_decode(json_encode($data));

    //to access key=values directly

    echo $obj->person1->firstname;

   //to access all firstname only
    foreach($obj as $o){
      echo $o->firstName;
    }