我需要创建一个带有多维数组的函数,并将其子数组数据转换为具有特定结构的字符串。
我有这个数组:
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"
}
}
我希望像:
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"
)
我的代码在这里:
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@example.com";
$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>';
}
首先,我使用crearMailDeVencimientos
创建消息,然后使用每条消息向每封邮件(每个ID)发送一封电子邮件。 $datos
包含发送给它的名称和邮件。
答案 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 $destinatario;
永远不会发生,因为return $mail;
标记了函数调用的结束。
这是一个建议:
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@example.com";
$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>';
}
}
答案 1 :(得分:0)
假设Array(2)
是多维数组中的顶级,那么这样的东西应该有效:
$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;
}
$first
的目的是为了不添加尾随或前面的换行符。这是由三元运算符(1 = 1 ? [this will execute if 1=1 is true] : [this will execute if 1=1 is false])