2017-01-17 3 views
0

У меня есть многомерный массив, который я хотел бы взорвать (а затем позже сможет взорваться обратно в исходный многомерный массив). Есть ли способ взорвать, удерживая ключи?Implode multidimentional array с разными разделителями в php

Вот пример того, что мой массив выглядит следующим образом:

Array ( 
    [draw] => 1 
    [columns] => Array ( 
     [0] => Array ( 
      [data] => 0 
      [name] => Edit 
      [searchable] => true 
      [orderable] => true 
      [search] => Array ( 
       [value] => 
       [regex] => false)) 
     [1] => Array ( 
      [data] => 1 
      [name] => 
      [searchable] => true 
      [orderable] => true 
      [search] => Array ( 
       [value] => 
       [regex] => false)) 
     [2] => Array ( 
      [data] => 2 
      [name] => 
      [searchable] => true 
      [orderable] => true 
      [search] => Array ( 
       [value] => 
       [regex] => false)) 

Вот что я пытался без успеха:

$out = implode('::',array_map(function($a) 
           { 
            return implode('&&',array_map(function($b) 
                    { 
                     return implode('~~',$b); 
                    },$array)); 
           })); 

Я также попытался это:

foreach($array as $Value) 
{ 
    if(is_array($Value)) 
    { 
     foreach($Value as $Columns) 
     { 
      if(is_array($Columns)) 
      { 
       foreach($Columns as $Search) 
       { 
        if(is_array($Search)) 
        { 
         $Search = implode("::",$Search); 
        } 
        //echo "<br>Search: "; print_r($Search); 
       } 
      } 
      else 
      { 
       echo "<br>Columns: "; print_r($Columns); 
       //$Columns = implode("&&",$Columns); 
      } 
     } 
    } 
    else 
    { 
     //$Value = implode("~~",$Value); 
    } 
} 
//print_r($array); 

Что бы я хотел, чтобы он выглядел в конце разлома:

[draw] => 1 :: [columns] => && [0] => ~~ [data] => 0 ~~ [name] => Edit ~~ [searchable] => true ~~ [orderable] => true ~~ [search] => %% [value] => %% [regex] => false && [1] => ~~ [data] => 1 ~~ [name] => ~~ [searchable] => true ~~ [orderable] => true ~~ [search] => %% [value] => %% [regex] => false 

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

ответ

1

Почему бы вам не использовать только serialize(), а затем unserialize(), чтобы получить его обратно?

Этот встроенный PHP определенно будет работать лучше/быстрее/безопаснее, чем любой пользовательский код, который вы написали сами.

+0

Это потрясающе, жаль, что я не обнаружил, что намного раньше! – Mike

0

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

Я понял, что знаю, что такое ключи и что я могу использовать их в процессе имплозии. Так что я сделал это:

function Convert_From_Array($array) 
{ 
    $Number = count($array['columns']); 

    for ($i = 0 ; $i < $Number ; $i++) 
    {    
     $array['columns'][$i]['search'] = implode('::',$array['columns'][$i]['search']); 

     $array['columns'][$i] = implode('&&', $array['columns'][$i]); 
    } 
    $array['columns'] = implode('~~', $array['columns']); 
    $array['order'][0] = implode('&&',$array['order'][0]); 
    $array['order'] = implode('&&',$array['order']); 
    $array['search'] = implode('&&',$array['search']); 
    $array = implode('%%', $array); 
} 

Затем, чтобы использовать эту функцию, я называю это так:

$PostKept = Convert_From_Array($KeepPost); 

С $KeepPost является многомерным массивом, который я пытаюсь взрываться. Конечные результаты выглядят так:

1%%0&&Edit&&true&&true&&::false~~1&&&&true&&true&&::false~~2&&&&true&&true&&::false~~3&&&&true&&true&&::false~~4&&&&true&&true&&::false~~5&&&&true&&true&&::false~~6&&&&true&&true&&::false~~7&&&&true&&true&&::false~~8&&&&true&&true&&::false%%0&&asc%%0%%25%%&&false%%QDefs 

Теперь мне придется соединить все это позже.