2014-04-11 1 views
0

나는이 유사한 배열을 생성해야합니다PHP : 함수에 게시 배열 만들고 다차원 배열

$need = Array(
"smsSend" => Array(
    "account" => Array(
     "user" => 123, 
     "password" => "xxxxxx", 
     "profile" => 123456 
    ) 
), 
"smsConfig" => Array 
    (
    "region" => Array 
     (
     "locale" => "es_ES", 
     "timezone" => "America/Bogota" 
    ), 
    "send" => Array 
     (
     "from" => "9:00:00", 
     "to" => "21:00:00" 
    ), 
    "sms" => Array 
     (
     "channel" => "SMS", 
     "from" => "LINIO", 
    ) 
), 
"templateConfig" => Array 
    (
    "template" => Array 
     (
     "postpago" => 1111, 
     "prepago" => 0010, 
     "notificar" => 1112 
    ) 
), 
"fieldsConfig" => Array 
    (
    "fields" => Array 
     (
     "nombre" => "firstname", 
     "carrier" => "nome_transportadora", 
     "track" => "track", 
     "cantidad" => "total_depois_de_impostos" 
    ) 
), 
"serverConfig" => Array 
    (
    "test" => "http://miportal", 
    "prod" => "", 
    "mode" => "test", 
    "adapter" => "curl", 
    "type" => "post", 
    "telephone" => "12345" 
), 
"fields" => Array 
    (
    "sms" => Array 
     (
     "address" => "mobile_phone" 
    ), 
    "email" => Array 
     (
     "address" => "email_cliente" 
    ) 
) 
); 

이 배열에서 $ _POST에서받을 :

$post = Array(
"smsSend" => Array(
    "account" => Array(
     "user:123", 
     "password:xxxxxx", 
     "profile:123456" 
    ) 
), 
"smsConfig" => Array 
    (
    "region" => Array 
     (
     "locale:es_ES", 
     "timezone:America/Bogota" 
    ), 
    "send" => Array 
     (
     "from:9:00:00", 
     "to:21:00:00" 
    ), 
    "sms" => Array 
     (
     "channel:SMS", 
     "from:LINIO", 
    ) 
), 
"templateConfig" => Array 
    (
    "template" => Array 
     (
     "postpago:1111", 
     "prepago:0010", 
     "notificar:1112" 
    ) 
), 
"fieldsConfig" => Array 
    (
    "fields" => Array 
     (
     "nombre:firstname", 
     "carrier:nome_transportadora", 
     "track:track", 
     "cantidad:total_depois_de_impostos" 
    ) 
), 
"serverConfig" => Array 
    (
    "test:http://miportal", 
    "prod:", 
    "mode:test", 
    "adapter:curl", 
    "type:post", 
    "telephone:12345" 
), 
"fields" => Array 
    (
    "sms" => Array 
     (
     "address:mobile_phone" 
    ), 
    "email" => Array 
     (
     "address:email_cliente" 
    ) 
) 
); 

문제는이다 주기를 사용하여 부모 항목을 어셈블 링하고 레벨을 생성하기 위해 트리 함수를 사용합니다.

function createLevel1($array_data) { 
     $array_push = array(); 
     foreach ($array_data as $key_l1 => $elem_l1) { 
      array_push($array_push[$key_l1], ""); 
      createLevel2($elem_l1, $array_push, $key_l1); 
      // print_r($resl1); 
     } 
     return $array_push; 
    } 

    function createLevel2($elemento_array, $push_array, $parent_key) { 
     foreach ($elemento_array as $key_l2 => $elem_l2) { 
      if (is_array($elem_l2)) { 
       $push_array[$parent_key][$key_l2] = ""; 
       createLevel3($elem_l2, $push_array, $parent_key, $key_l2);      
      } else { 
       $items = explode("::", $elem_l2); 
       $push_array[$parent_key][$items[0]] = $items[1];    
      } 
     } 

     return $push_array; 
    } 

    function createLevel3($elemento_array, $push_array, $parent_key, $parentl2_key) { 
     $push_array[$parent_key][$parentl2_key] = ""; 
     foreach ($elemento_array as $key_l3 => $elem_l3) { 
      if (is_array($elem_l3)) { 
       createLevel3($elem_l3, $push_array, $parent12_key, $key_l3); 
      } else { 
       $items = explode("::", $elem_l3); 
       $push_array[$parent_key][$parentl2_key][$items[0]] = $items[1]; 
      } 
     } 
     return $push_array; 
    } 
    $parameter = $_POST['postData']; 
    @$info = createLevel1($parameter); 
    print_r($parameter); 

TER는 옵션이 비어 :

Array 
(
    [smsSend] => 
    [smsConfig] => 
    [templateConfig] => 
    [fieldsConfig] => 
    [serverConfig] => 
    [fields] => Array 
     (
      [sms] => 
      [email] => 
     ) 
) 
+0

문제점을 이해할 수 없습니다. 입력 배열은 무엇입니까? 출력 배열로 원하는 것은 무엇입니까? –

+0

입력 배열은 $ post 배열이고 두 번째 배열은 출력 배열 바늘 $은 첫 번째 배열이 필요합니다 문제는 $ post 배열을 반복하고이 배열을 함수 retunr에 반복합니다 배열 ( [smsSend] => [은 smsconfig] => 는 [templateConfig] => 는 [fieldsConfig] => 는 [serverConfig =는 => 배열 ( [SMS] => [메일] => ) )의 – user1661345

답변

0
$need = array(); 

foreach ($post as $key => $value) { 
    if (is_array($value)) { 
     $need[$key] = $value; 

     foreach ($value as $key2 => $value2) { 
      if (is_array($value2)) { 

       foreach ($value2 as $key3 => $value3) { 
        if (is_array($value3)) { 

        } elseif (strpos($value3, ':') !== FALSE) { 
         $tmp3 = explode(':', $value3); 
         $need[$key][$key2][$tmp3[0]] = $tmp3[1]; 
         unset($need[$key][$key2][$key3]);    
        } 
       }  

      } elseif (strpos($value2, ':') !== FALSE) { 
       $tmp2 = explode(':', $value2); 
       $need[$key][$tmp2[0]] = $tmp2[1]; 
       unset($need[$key][$key2]);    
      } 
     } 
    }   
} 

나는이 코드를 작성, 나는이 결과이 같은 $info를 인쇄 할 때 문제가, 배열 $post입니다. 나는 그것이 효과가 있다고 생각한다. 그러나 문제는 거기에있다. 내가 폭발을 사용할 때 그것은 http://miportal.com도 나눕니다. strstr과 같은 다른 방법을 시도해보십시오. 재귀 함수로 시도해보십시오.

+0

는 [분야]는> 완벽한 덕분에 아주 많이 !!! :) – user1661345