Изменение родительского ключа со значением подмассива Трехмерный массив

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

Что мне нужно сделать, так это изменить ключ, который выводится в массиве второго уровня. Массив с «uid» в третьем массиве. Ниже у меня есть визуальное изображение того, как это выглядит сейчас и что мне нужно, чтобы это было.

<pre>

(
    [0] => Array
        (
            [uid] => 155
            [amount] => 45
        )

    [1] => Array
        (
            [uid] => 156
            [amount] => 45
        )

    [2] => Array
        (
            [uid] => 157
            [amount] => 45
        )

    [3] => Array
        (
            [uid] => 158
            [amount] => 45
        )

    [4] => Array
        (
            [uid] => 159
            [amount] => 45
        )

    [5] => Array
        (
            [uid] => 160
            [amount] => 45
        )

)

Desired Output

Array
(
    [155] => Array
        (
            [uid] => 155
            [amount] => 45
        )

    [156] => Array
        (
            [uid] => 156
            [amount] => 45
        )

    [157] => Array
        (
            [uid] => 157
            [amount] => 45
        )

    [158] => Array
        (
            [uid] => 158
            [amount] => 45
        )

    [159] => Array
        (
            [uid] => 159
            [amount] => 45
        )

    [160] => Array
        (
            [uid] => 160
            [amount] => 45
        )

)
</pre>

Я пробовал несколько циклов для каждого, но они генерировали какой-то странный вывод, и я пытался передать значение во время массива 2cnd через array_push, но получил только ошибки.

$p_array = array(
$alpha = array('uid' => 155,'amount' => 45),
$alpha = array('uid' => 156,'amount' => 45),
$alpha = array('uid' => 157,'amount' => 45),
$alpha = array('uid' => 158,'amount' => 45),
$alpha = array('uid' => 159,'amount' => 45),
$alpha = array('uid' => 160,'amount' => 45)
);
print_r($p_array);

Так что этот код предназначен только для создания массива, $alpha используется в качестве заполнителя. Идея состоит в том, чтобы просто создать массив, с которым я работаю, но фактический код является конфиденциальной информацией, поэтому код, который генерирует массив, не будет редактироваться, мне просто нужно манипулировать массивом $ p_array

Bryan Swarms 30.05.2019 19:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для этого есть функция:

$result = array_column($array, null, 'uid');

Если вы хотите зациклиться или у вас старая версия PHP:

foreach($array as $v) {
    $result[$v['uid']] = $v;
}
Ответ принят как подходящий

Самым элегантным решением было бы использовать сокращение:

<?php

$p_array = array(
    $alpha = array('uid' => 155,'amount' => 45),
    $alpha = array('uid' => 156,'amount' => 45),
    $alpha = array('uid' => 157,'amount' => 45),
    $alpha = array('uid' => 158,'amount' => 45),
    $alpha = array('uid' => 159,'amount' => 45),
    $alpha = array('uid' => 160,'amount' => 45)
);

$result = array_reduce(
    $p_array,
    function($acc, $cur) {
        $acc[$cur['uid']] = $cur;
        return $acc;
    },
    array()
);

print_r($result);

array_reduce начнется с начального значения (которое в нашем случае является пустым массивом), а затем для каждого элемента вызовет обратный вызов с двумя элементами: 1-й аккумулятор и 2-й текущий элемент. Аккумулятор инициализируется нашим начальным значением (пустым массивом), а затем передается вместе с каждым последующим вызовом. Следовательно, важно вернуть $acc после того, как вы его изменили.

Затем, чтобы, наконец, выполнить преобразование, которое вы просите, поместите текущий элемент в аккумулятор с индексом, используя клавишу uid текущего элемента: $acc[$cur['uid']] = $cur;

Спасибо! Я проверю это, чтобы увидеть, работает ли это лучше! Я очень ценю помощь!

Bryan Swarms 30.05.2019 19:29

Другие вопросы по теме