Php 如何访问动态数组键和值

Php 如何访问动态数组键和值,php,Php,我已经动态创建了上面的数组。例如,firstName,电子邮件字段有时可能更改为4个元素,有时更改为12个元素。不确定如何访问键和相应的值。我无法确定数组的哪个部分应该是动态的,但以下是一些我认为可能是您的情况的示例: 密钥的存在,例如“email”是动态的,您希望找到包含该密钥的子数组 array:1 [▼ 0 => array:4 [▼ "firstName" => "val" "email" => "someval" "phone" => "so

我已经动态创建了上面的数组。例如,firstName,电子邮件字段有时可能更改为4个元素,有时更改为12个元素。不确定如何访问键和相应的值。

我无法确定数组的哪个部分应该是动态的,但以下是一些我认为可能是您的情况的示例:

  • 密钥的存在,例如“email”是动态的,您希望找到包含该密钥的子数组

    array:1 [▼
     0 => array:4 [▼
       "firstName" => "val"
       "email" => "someval"
       "phone" => "someval"
       "zip" => "someval"
     ]
    ]
    
  • 数组的深度是动态的,您希望找到“电子邮件”

  • 您有一个数组,并且希望将其减少为仅来自键的值(如果存在):


  • 您是否尝试过使用foreach(_数组为$key=>$value){…}?如Jimmy所建议,使用foreach,或者如果您知道该位置,请使用$firstname=$myArray[0]['firstname']@吉米亚达罗。是的,我试过了,但得到的值是0。我认为它是顶级索引键。@jannej。正如我提到的,firstName可能会在数组中更改。这是动态数组。firstName将更改为lastName或其他名称。这是未知的,因此您必须使用foreach()对其进行循环。最后,您必须检查一些值。您可以尝试访问第一个位置,如$myArray[0][0],但我不推荐这样做。
    $data = [
        [
            'name' => 'Baz',
            'email' => 'test@example.com',
        ],
        [
            'name' => 'Foo',
        ],
    ];
    
    $dataWithEmail = [];
    foreach ($data as $item) {
        if (array_key_exists('email', $item)) {
            $dataWithEmail[] = $item;
        }
    }
    var_dump($dataWithEmail);
    
    // alternatively you can use:
    
    $dataWithEmail = [];
    $dataWithEmail = array_filter(
        $data,
        function($item) {
            return array_key_exists('email', $item);
        }
    );
    var_dump($dataWithEmail);
    
    $data = [
        [
            [
                [
                    'name' => 'Bar',
                    'email' => 'bar@example.com',
                ],
            ],
        ],
        [
            [
                'name' => 'Foo',
                'email' => 'foo@example.com',
            ],
        ],
    ];
    
    $emails = [];
    array_walk_recursive(
        $data,
        function ($item, $key) use (&$emails) {
            if ('email' === $key) {
                $emails[] = $item;
            }
        }
    );
    var_dump($emails);
    
    $data = [
        [
            'name' => 'Baz',
            'email' => 'test@example.com',
        ],
        [
            'name' => 'Foo',
        ],
    ];
    
    $onlyEntriesWithNames = array_filter(
        $data,
        function ($item) {
            return array_key_exists('name', $item);
        }
    );
    $namesFromArray = array_reduce(
        $onlyEntriesWithNames,
        function($carry, $item) {
            $carry[] = $item['name'];
    
            return $carry;
        },
        []
    );
    var_dump($namesFromArray);