Как получить одно значение из повторяющихся значений в многомерном массиве с помощью PHP?

У меня есть многомерный массив, некоторые значения повторяются, а некоторые уникальны.

повторяющиеся значения являются родительскими, а уникальные значения являются дочерними для повторяющихся значений.

Многомерный массив:

Array
(
    [0] => Array
        (
            [L1_ID] => 21
            [L1_ATTR_DESC] => Project Overview
            [L2_ATTR_DESC] => Project Status
            [L3_ATTR_DESC] => Ready
        )
    [1] => Array
        (
            [L1_ID] => 21
            [L1_ATTR_DESC] => Project Overview
            [L2_ATTR_DESC] => Project Status
            [L3_ATTR_DESC] => Pending
        )
    [2] => Array
        (
            [L1_ID] => 21
            [L1_ATTR_DESC] => Project Overview
            [L2_ATTR_DESC] => Project Status
            [L3_ATTR_DESC] => Completed
        )
     [3] => Array
        (
            [L1_ID] => 21
            [L1_ATTR_DESC] => Project Overview
            [L2_ATTR_DESC] => Project Quality
            [L3_ATTR_DESC] => Independ
        )
       [4] => Array
        (
            [L1_ID] => 21
            [L1_ATTR_DESC] => Project Overview
            [L2_ATTR_DESC] => Project Quality
            [L3_ATTR_DESC] => G+1
        )
)

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

Ожидаемый результат - вот так:

-Project Status      -Project Build
    --Ready             --Independ
    --Pending           --G+1
    --Completed

person Manish Tiwari    schedule 18.05.2016    source источник
comment
хорошо, и что вы пробовали на данный момент? не сработало как задумано?   -  person rsz    schedule 18.05.2016
comment
На самом деле, я запутался, как это сделать.   -  person Manish Tiwari    schedule 18.05.2016
comment
используйте цикл и условие для хранения, как вы хотите   -  person Murad Hasan    schedule 18.05.2016
comment
Начнем с того, что ваш многомерный массив недостаточно описателен (или понятен) для того, чтобы массив мог быть встроен в нужную вам структуру. Я полагаю, что если вы имеете в виду Project Build как Project Quality, вам просто нужно перебрать массив, проверить L2_ATTR_DESC и отсортировать его в другой массив.   -  person mauris    schedule 18.05.2016
comment
@ManishTiwari, какая часть тебя смущает?   -  person rsz    schedule 18.05.2016
comment
проверьте этот ответ stackoverflow .com/questions/10408482/   -  person Ranjeet Singh    schedule 18.05.2016
comment
посмотрите на эту логику: это не полностью, но почти, просто посмотрите код https://3v4l.org/JuPIa   -  person Murad Hasan    schedule 18.05.2016


Ответы (3)


Просто для проверки посмотрите, что происходит: Онлайн-ссылка

$ps = array();
foreach($arr as $value){
    $index = str_replace(" ", "", strtolower($value['L2_ATTR_DESC']));
    $ps[$index][] = $value['L3_ATTR_DESC'];
}

echo '<pre>';
print_r($ps);

Отныне вы можете создать его по-своему.

person Murad Hasan    schedule 18.05.2016

Я думаю, что то, что вы хотите, обычно называют «индексным массивом». Вы можете проверить array_column, который, я думаю, удовлетворит ваши потребности.

$array = array(/* multidimensional array */);
$index = array_column($array, L3_ATTR_DESC);

$index будет содержать массив значений, связанных с L3_ATTR_DESC в массиве $.

person JesusTheHun    schedule 18.05.2016
comment
почему ты думаешь? почему не уверенно? - person Murad Hasan; 18.05.2016

Рабочая демонстрация. Вы можете использовать оператор foreach

foreach($a as $arg) {
   $tmp[$arg['L1_ATTR_DESC']][$arg['L2_ATTR_DESC']][] = $arg['L3_ATTR_DESC'];
}

$output = array();
foreach($tmp as $type => $labels) {
$output[] = array(
    'L1_ATTR_DESC' => $type,
    'L2_ATTR_DESC' => $labels
  );
}

Я думаю, вы ожидаете такого результата

 Array
(

     [L1_ATTR_DESC] => Project Overview
     [L2_ATTR_DESC] => Array
         (
            [Project Status] => Array
                (
                     [0] => Ready
                     [1] => Pending
                     [2] => Completed
                )

            [Project Quality] => Array
                (
                     [0] => Independ
                     [1] => G+1
                )
       )
)

OR

foreach($a as $arg)
{
    $tmp[$arg['L2_ATTR_DESC']][] = $arg['L3_ATTR_DESC'];
}
print_r($tmp);

Выход

    Array
    (
        [Project Status] => Array
            (
                 [0] => Ready
                 [1] => Pending
                 [2] => Completed
            )

        [Project Quality] => Array
            (
                 [0] => Independ
                 [1] => G+1
            )
    )
person KARTHI SRV    schedule 18.05.2016