2017-10-31 23 views
0

多次元配列をとり、そのサブ配列データを特定の構造の文字列に変換する関数を作成する必要があります。配列を使ってメッセージ文字列を作成する方法は?

私はこの配列があります。

array(2) { 
    [257]=> 
    array(5) { 
    ["recaudacion"]=> 
    string(10) "2017-10-07" 
    ["Contribuyentes Locales,Activid. Especiales y Salas de Recreacion"]=> 
    string(10) "2017-10-16" 
    ["Contribuyentes Convenio Multilateral"]=> 
    string(10) "2017-10-13" 
    ["Regimen simplificado"]=> 
    string(10) "2017-10-00" 
    ["Declaracion Jurada Fiscal 2016 Contibuyentes Locales"]=> 
    string(10) "2017-10-00" 
    } 
    [258]=> 
    array(3) { 
    ["Impuestos de Sellos"]=> 
    string(10) "2017-10-10" 
    ["Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral"]=> 
    string(10) "2017-10-00" 
    ["Recategorizacion cuatrimestral regimen simplificado"]=> 
    string(10) "2017-10-00" 
    } 
} 

をし、私のようなものしたい:私は送った後、crearMailDeVencimientosでメッセージを作成

function crearMailDeVencimientos($idPerfil, $impuestosDelPerfil){ 
    $datos = getPerfilData($idPerfil); 
    $mail = "impuestos de: ".$datos[0]['nombre']; 
    $destinatario = $datos[0]['email']; 

    foreach ($impuestosDelPerfil as $impuesto) { 
     $keys = key($impuestosDelPerfil); 
     $mail .= "\n".$keys; 
     $mail .= " Vence: ".$impuesto; 
    } 
    return $mail; 
    return $destinatario; 
} 

function enviarMail(){ 
    $impuestosPorPerfil = filtrarImpuestos(); 
    foreach ($impuestosPorPerfil as $idPerfil => $impuestosDelPerfil) { 
     $mail = crearMailDeVencimientos($idPerfil, $impuestosDelPerfil); 
     $destinatario = crearMailDeVencimientos($idPerfil, $impuestosDelPerfil); 
     $correo = "[email protected]"; 
     $asunto = "Vencimientos del mes actual"; 
     $headers = "From: [redacted]"." <".$correo.">\r\n"; 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

     // mail($destinatario,$asunto,$mail,$headers); 
     echo '<div class="enviado">Enviado</div>'; 
    } 

まず:

Array (
    257=>"recaudacion Vence: 2017-10-07 

      Contribuyentes Locales,Activid. Especiales y Salas de Recreacion Vence: 2017-10-00 

      Contribuyentes Convenio Multilateral Vence: 2017-10-00 

      Regimen simplificado Vence: 2017-10-00 

      Declaracion Jurada Fiscal 2016 Contibuyentes Locales Vence: 2017-10-00", 
    258=>"Impuestos de Sellos Vence: 2017-10-10 

      Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral Vence: 2017-10-00 

      Recategorizacion cuatrimestral regimen simplificado Vence: 2017-10-00" 
) 

ここに私のコードをメールごとに各メール(各ID)にメールを送ります。 $datosには、送信された名前とメールが含まれています。 Array(2)を仮定

+0

をする「より良いではない、あなたのコードの試みを表示そのアイデアを理解することですが、将来あなた自身のためにどのように理解するかを理解するのに役立ちます。 – Sean

+0

OK、コードを編集しました。それを見てください –

+0

通常、コードサンプルに実際のデータを入れるのは良い考えではありません。あなたの質問から電子メールアドレスと企業名を編集しました。 –

答えて

1

このカスタム関数を使用して、条件を使用せずに目的のデータ構造を構築することができます。

コード:(Demo

$array=[ 
    257 => [ 
     "recaudacion" => "2017-10-07", 
     "Contribuyentes Locales,Activid. Especiales y Salas de Recreacion" => "2017-10-16", 
     "Contribuyentes Convenio Multilateral" => "2017-10-13", 
     "Regimen simplificado" => "2017-10-00", 
     "Declaracion Jurada Fiscal 2016 Contibuyentes Locales" => "2017-10-00" 
    ], 
    258=> [ 
     "Impuestos de Sellos"=>"2017-10-10", 
     "Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral"=>"2017-10-00", 
     "Recategorizacion cuatrimestral regimen simplificado"=>"2017-10-00" 
    ] 
]; 

function stringifySubarrays($array){ 
    foreach($array as &$a){ // modify $a by reference 
     foreach($a as $k=>&$v){ // modify $v by reference 
      $v="$k Vence: $v"; // write new value using key and value 
     } 
     $a=implode("\n\n",$a); // glue new subarray of string together using 2 newline characters 
    } 
    return $array; // return the new array 
} 
var_export(stringifySubarrays($array)); 

出力:

array (
    257 => 'recaudacion Vence: 2017-10-07 

      Contribuyentes Locales,Activid. Especiales y Salas de Recreacion Vence: 2017-10-16 

      Contribuyentes Convenio Multilateral Vence: 2017-10-13 

      Regimen simplificado Vence: 2017-10-00 

      Declaracion Jurada Fiscal 2016 Contibuyentes Locales Vence: 2017-10-00', 
    258 => 'Impuestos de Sellos Vence: 2017-10-10 

      Declaracion Jurada anual 2016 Contribuyentes de convenio multilateral Vence: 2017-10-00 

      Recategorizacion cuatrimestral regimen simplificado Vence: 2017-10-00', 
) 

P.S.あなたのコードに論理エラーがあることを指摘しておきます。 return $mail;が関数呼び出しの終了を示すため、return $destinatario;は決して起こりません。ここで

は提案です:

function crearMailDeVencimientos($idPerfil, $impuestosDelPerfil){ 
    // ... processing ... 
    return [$mail,$destinatario]; // send back both pieces of data 
} 

function enviarMail(){ 
    // ... code ... 
    foreach ($impuestosPorPerfil as $idPerfil => $impuestosDelPerfil) { 
     list($mail,$destinatario) = crearMailDeVencimientos($idPerfil, $impuestosDelPerfil); 
     // ^^^^^ ^^^^^^^^^^^^^ assign variable names to the two returned values 
     // ... code ... 
    } 
} 

あなたがデータを表示したい方法に応じて、あなたはこのようなもの使用することがあります:

function crearMailDeVencimientos($idPerfil, $impuestosDelPerfil){ 
    $datos = getPerfilData($idPerfil); 
    $mail = "impuestos de: ".$datos[0]['nombre']; 
    $destinatario = $datos[0]['email']; 
    foreach($impuestosDelPerfil as $i=>$a){ 
     $mail.="\n\n$i"; // double spacing before each id number 
     foreach($a as $k=>$v){ 
      $mail.="\n\n\t$k Vence: $v"; // double spacing before each child, addintg \t (tab) for visual 
     } 
    } 
    return [$mail,$destinatario]; // send back both pieces of data 
} 

function enviarMail(){ 
    $impuestosPorPerfil = filtrarImpuestos(); 
    foreach ($impuestosPorPerfil as $idPerfil => $impuestosDelPerfil) { 
     list($mail,$destinatario) = crearMailDeVencimientos($idPerfil, $impuestosDelPerfil); 
     $correo = "[email protected]"; 
     $asunto = "Vencimientos del mes actual"; 
     $headers = "From: [redacted]"." <".$correo.">\r\n"; 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

     // mail($destinatario,$asunto,$mail,$headers); 
     echo '<div class="enviado">Enviado</div>'; 
    } 
} 
+0

私はこのようにしている間に、これらの2つのデータを自分のコードに組み込むことはできないと言っています。 –

+0

しかし、何時にあなたの機能を使うことができますか?ループは作られませんか? –

+0

あなたはそれを見ることができますか? http://sandbox.onlinephpfunctions.com/code/8219d9d00def5cb6a12a5122178b958217a9945e –

0

は、このような何かが動作する必要があり、多次元アレイの最上位である:

$newarray = Array(); 

foreach($arr as $firstkey => $arr2) { //$arr here is the variable that contains your array 
    $newstring = ""; 
    $first = true; 
    foreach($arr2 as $key => $val) { 
     $newstring .= ($first ? "" : "\r\n\r\n") . $key . " Vence: " . $val; 
     $first = false; 
    } 
    $newarray[$firstkey] = $newstring; 
} 

3v4l.org result

末尾又は先行改行が存在しないように$firstの目的であります追加されました。 (1 = 1 ? [this will execute if 1=1 is true] : [this will execute if 1=1 is false])

+0

ごめんなさいAlphaDelts、私の編集したコードが見えますか? –

+0

私は答えを出しました、私はあなたのためにあなたの仕事をするつもりはありません。 – AlphaDelta

+0

:c:c:C:C:c:C –

関連する問題