رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تبدیل آرایه چند بعدی به یک بعدی
#1
سلام دوستان من یه ارایه چند بعدی هس میخوام تک بعدی کنم از روش بازگشتی استفاده میکنم ولی به جواب نمی رسم
نمونه ارایه رو گذاشتم  Shy
echo"<pre>";
$b = array(
     array(
       "id"=>1,
       "parent"=>0 ,
       "order"=>0  ,
     ),
     array(
       "id"=>22,
       "parent"=>1 ,
       "order"=>0  ,
     ),
     array(
       "id"=>11,
       "parent"=>1 ,
       "order"=>1 ,
     ),
     array(
       "id"=>23,
       "parent"=>11 ,
       "order"=>0 ,
     ),
       array(
       "id"=>14,
       "parent"=>11 ,
       "order"=>1,
     ),
             array(
       "id"=>3,
       "parent"=>0 ,
       "order"=>2,
     ),
             array(
       "id"=>4,
       "parent"=>0 ,
       "order"=>3,
     ),
            array(
       "id"=>5,
       "parent"=>0 ,
       "order"=>4,
     ),
);

$a = array(
   array(
       "id"=>1,
       "order"=>0,
       "children"=>array(
           array(
               "id"=>22,
               "order"=>0,
           ),
           array(
               "id"=>11,
               "order"=>1,
               "children"=>array(
                   array(
                       "id"=>23,
                       "order"=>0,
                   ),
                   array(
                       "id"=>14,
                       "order"=>1,
                   ),
               ),
           ),
       )
   ),
   array(
       "id"=>3,
       "order"=>2
   ),
   array(
       "id"=>4,
       "order"=>3
   ),
   array(
       "id"=>5,
       "order"=>4
   )
       );
print_r($a);


print_r($b);

?>
اجراش کنید خروجیش رو میبینید
پاسخ
تشکر شده توسط:
#2
<?php

$a = [
    [
        "id" => 1,
        "order" => 0,
        "children" => [
            [
                "id" => 22,
                "order" => 0,
            ],
            [
                "id" => 11,
                "order" => 1,
                "children" => [
                    [
                        "id" => 23,
                        "order" => 0,
                    ],
                    [
                        "id" => 14,
                        "order" => 1,
                    ],
                ],
            ],
        ],
    ],
    [
        "id" => 3,
        "order" => 2,
    ],
    [
        "id" => 4,
        "order" => 3,
    ],
    [
        "id" => 5,
        "order" => 4,
    ]
];

$b = [
    [
        "id" => 1,
        "parent" => 0,
        "order" => 0,
    ],
    [
        "id" => 22,
        "parent" => 1,
        "order" => 0,
    ],
    [
        "id" => 11,
        "parent" => 1,
        "order" => 1,
    ],
    [
        "id" => 23,
        "parent" => 11,
        "order" => 0,
    ],
    [
        "id" => 14,
        "parent" => 11,
        "order" => 1,
    ],
    [
        "id" => 3,
        "parent" => 0,
        "order" => 2,
    ],
    [
        "id" => 4,
        "parent" => 0,
        "order" => 3,
    ],
    [
        "id" => 5,
        "parent" => 0,
        "order" => 4,
    ],
];
 
function flattenArray($array, $level = 0) {
    $result = [];
    $prefix = '';
    for ($i = 0; $i < $level; $i++) {
        $prefix .= '_';
    }
    foreach($array as $key => $value) {
        if (is_array($value)) {
            foreach(flattenArray($value, $level + 1) as $k => $v) {
                $index = $prefix . $k;
                $increment = 2;
                while (isset($result[$index])) {
                    $index = $prefix . $k . $increment++;
                }
                $result[$index] = $v;
            }
        } else {
            $index = $prefix . $key;
            $increment = 2;
            while (isset($result[$index])) {
                $index = $prefix . $key . $increment++;
            }
            $result[$index] = $value;
        }
    }
    return $result;
}

echo '<pre>' . print_r(flattenArray($a), true) . '</pre>';
echo '<pre>' . print_r(flattenArray($b), true) . '</pre>';

?>
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان