nastya97core
@nastya97core
Начинающий программист

Как собрать массив определённого ключа другого массива?

Здравствуйте. Есть массив такого вида:
Array (
    [numbers] => Array
        (
            [0] => Array
                (
                    [alias] => zolotie
                    [price] => 0

                )

            [1] => Array
                (
                    [alias] => serebryanie
                    [price] => 3000
                    [numbers] => Array
                        (
                            [0] => Array
                                (
                                    [value] => 9629660055
                                    [formattedValue] => N9N6N2N9N6N6Y0N0Y5N5N
                                )

                            [1] => Array
                                (
                                    [value] => 9629880055
                                    [formattedValue] => N9N6N2N9N8N8Y0N0Y5N5N
                                )

                            [2] => Array
                                (
                                    [value] => 9637220055
                                    [formattedValue] => N9N6N3N7N2N2Y0N0Y5N5N
                                )

                            [3] => Array
                                (
                                    [value] => 9637880055
                                    [formattedValue] => N9N6N3N7N8N8Y0N0Y5N5N
                                )

                            [4] => Array
                                (
                                    [value] => 9639220055
                                    [formattedValue] => N9N6N3N9N2N2Y0N0Y5N5N
                                )
...


мне нужно получать эти значения:
[value] => 9629660055

то есть, чтобы новый массив был вот таким:
["9629660055","9629880055","9637220055","9639220055"]


Как такое можно сделать?
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
<?php

// Ваши данные в упрощенном виде (без мусора)
$array = [
    'numbers' => [
        [
            'numbers' => [
                [
                    'formattedValue' => 111,
                ],
                [
                    'formattedValue' => 3333,
                ],
                [
                    'formattedValue' => 5555,
                ],
            ],
        ],
        [
            'numbers' => [
                [
                    'formattedValue' => 200111,
                ],
                [
                    'formattedValue' =>  2003333,
                ],
                [
                    'formattedValue' =>  2005555,
                ],
            ],
        ],
    ],
];

// Найдет все значения во всех вложенных элементах с нужным ключом
// и сделает это рекурсивно — то есть во всех массивах и их детях.
function searchValues(array $arr, string $search, array $res = []): array {
    array_walk_recursive($arr, function($value, $key) use (&$res, $search) {
        if ($key === $search) {
            $res[] = $value;
        }
    });

    return $res;
}

// Ищем в нашем массиве все значения с ключом `formattedValue` 
// и складываем найденные значения в пустой массив (по дефолту), 
// но можно передать 3-м параметром и имеющийся массив, тогда значения туда добавятся.
$result = searchValues($array, 'formattedValue')

var_dump($result);

sandbox.onlinephpfunctions.com/code/d91d34104073f8...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BATPYIIIKOB
PHP, JS
array_column($arr, 'formattedValue')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы