Вопрос:

Получить конкретный ключ / значение из ассоциативного массива и сохранить их как переменную

php arrays associative-array

1955 просмотра

3 ответа

84 Репутация автора

Мне нужно получить доступ к специфике 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например, я хочу получить только ключ / значение только ids.

Итак, я попробовал что-то вроде этого:

$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пары?

Есть много похожих вопросов, подобных моему, но ответ, который я ищу, не является целью ни одного из этих вопросов.

Автор: Prince Brucex Источник Размещён: 13.01.2018 01:38

Ответы (3)


0 плюса

140 Репутация автора

Аргумент array_intersect_key должен хорошо выполнять свою работу:

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

документацию можно найти здесь

Автор: Transitive Размещён: 13.01.2018 02:14

3 плюса

150 Репутация автора

Решение
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>';
}

Вы можете просто вызвать ключ ассоциативного массива из массива

Это выводит ключ и значения

Автор: bitto kazi Размещён: 13.01.2018 03:02

0 плюса

31 Репутация автора

Чтобы получить доступ к определенным значениям ключа, вам нужно преобразовать массив в 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;
    }

Автор: Dards Размещён: 04.05.2019 12:27
Вопросы из категории :
32x32