วิธีรับค่าหนึ่งจากค่าที่ซ้ำกันในอาร์เรย์หลายมิติโดยใช้ 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 ใน $array

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