Имам масив с данни, който изглежда така:
01 | organization_1 | email_A | publication_A1 | pubID_A1
02 | organization_1 | email_A | publication_A2 | pubID_A2
03 | organization_1 | email_A | publication_A3 | pubID_A3
04 | organization_2 | email_B | publication_B1 | pubID_B1
05 | organization_2 | email_B | publication_B2 | pubID_B2
06 | organization_3 | email_C | publication_C1 | pubID_C1
07 | organization_4 | email_D | publication_D1 | pubID_D1
08 | organization_4 | email_D | publication_D2 | pubID_D2
Масивът е структуриран по следния начин:
array('org' => organization_x, 'email' => email_x, 'title' => publication_x, 'pub_id' => pubID_x).
Това, което трябва да направя, е да изведа този масив, така че да се показва като отделни имейл съобщения с бутон за изпращане след всяко. Човек, който разглежда тази страница, ще прегледа показаното съобщение и ще има опцията да щракне върху изпращане, за да изпрати конкретно на съответния имейл. Ето първоначалния дисплей, който трябва да създадем:
<!-- Message #1 -->
<form>
<input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2;pubID_A3">
<input type="hidden" name="recipient" value="email_A">
<input type="hidden" name="organization" value="organization_1">
<!-- start on-screen text display -->
To: email_A
Your account contains the following publication titles:
* publication_A1
* publication_A2
* publication_A3
You can edit these publications after logging into our system. Your email
address, email_A, serves as your username.
Thanks!
<!-- end on-screen text display -->
<input type="submit" name="submit" value="submit">
</form>
<!-- Message #2 -->
<form>
<input type="hidden" name="pub_ids" value="pubID_B1;pubID_B2">
<input type="hidden" name="recipient" value="email_B">
<input type="hidden" name="organization" value="organization_2">
<!-- start on-screen text display -->
To: email_B
Your account contains the following publications:
* publication_B1
* publication_B2
You can edit these publications after logging into our system. Your
email address, email_B, serves as your username.
Thanks!
<!-- end on-screen text display -->
<input type="submit" name="submit" value="submit">
</form>
... и докато всички елементи в масива бъдат обработени.
Изпробвах някои версии на следния код твърде дълго. Идеята е да преминете през всеки елемент, като свържете pub_id и данните за заглавието в текстови низове, които да бъдат предадени през формуляра или показани на екрана, ако е необходимо. Когато скриптът достигне ново име на организация, той трябва да събере всички части и след това да започне с имейл съобщението на следващата организация.
$current_org = '';
$pub_ids = '';
$titles = '';
foreach ($array AS $value)
{
$pub_ids .= $value['pub_id'] . ';';
$titles .= '* ' . $value['title'] . '<br />';
if ($current_org != $value['org'])
{
echo '<form>';
echo '<input type="hidden" name="pub_ids" value="' . $pub_ids . '">';
echo '<input type="hidden" name="recipient" value="' . $value['email'] . '">';
echo '<input type="hidden" name="organization" value="' . $value['org'] . '">';
echo 'To: ' . $value['email'];
echo '<br /><br />';
echo 'Your account contains the following publication titles:';
echo '<blockquote>';
echo $titles;
echo '</blockquote>';
echo 'You can edit these publications after logging into our system. Your email address, ' . $value['email'] . ', serves as your username.';
echo '<br /><br />';
echo 'Thanks!';
echo '<input type="submit" name="submit" value="submit">';
echo '</form>';
echo '<br /><br />';
$pub_ids = '';
$titles = '';
$current_org = $value['org'];
}
}
Но това, което всъщност получавам, е например pub_ids, които изглеждат така:
1-во съобщение: ‹input type="hidden" name="pub_ids" value="pubID_A1"›
2-ро съобщение: ‹input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2"›
3-то съобщение: ‹input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2;pubID_A3"›
4-то съобщение: ‹input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2;pubID_A3;pubID_B1"›
5-то съобщение: ‹input type="hidden" name="pub_ids" value="pubID_A1;pubID_A2;pubID_A3;pubID_B1;pubID_B2"›
Редактиране: Добавени $pub_ids = '' и $titles = '' всеки път, когато скриптът започва отначало. Това вече е отразено в кода по-горе близо до края на foreach().
Така че СЕГА проблемът изглежда е, че първата организация с повече от една публикация получава само една публикация в списъка. Тогава следващата организация получава публикацията на последната организация в списъка, както и своята собствена. След това останалите се изхвърлят. Нещо общо с първия оператор if()? Тъй като $current_org започва като NULL, първият цикъл никога няма да бъде зададен на $value['org']. Не мога да разбера как да го поправя обаче. Къде/как да проверя дали стойността на организацията се е променила?
Всяко вникване в този проблем е високо ценено!