2016-02-10 4 views
0

Я не php ниндзя, поэтому, пожалуйста, несите меня по моему запросу. У меня есть следующий код (в упрощенном примере формат здесь, так как в реальном коде происходит много других неуместных вещей):Как я могу получить данные упорядоченным способом из массива php?

Соединение с базой данных уже успешно определено и обрабатывается с помощью include в начале файла php.

// Define our $now value to compare times with 
$now = time(); 

// Define the numerical timestamps required for calculating stuff 
$min1st = 5140800; //59.5 days 
$max1st = 5227200; //60.5 days 
$min2nd = 7732800; //89.5 days 
$max2nd = 7819200; //90.5 days 
$delmar = 10368000; //120 days 

// Get each relevant entry from the key table 
try { 
    $stmt = $conn->prepare("SELECT * FROM keyTable WHERE `status` = 'neutral' ORDER BY `lastModified` ASC"); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 

// Set up some instance counters 
$a = 0; 
$b = 0; 
$c = 0; 

// Create some arrays to pop the data into from the next stage so we can use it again later 
$arrA = array(); 
$arrB = array(); 
$arrC = array(); 

Пока все хорошо. Следующая часть предназначена для определения того, какие из результатов базы данных имеют значение «lastModified», установленное за указанный период времени, используя некоторые данные, которые мы установили в верхней части. Это тоже очень хорошо (я думаю).

foreach($result as $value) { 
    // Lets find the ones that qualify for first email notification 
    if((($value['lastModified'] + $min1st) < $now) && (($value['lastModified'] + $max1st) > $now)) { 
     // Now only the entries that have been untouched for 60 days from today are listed here. Yay! Send out an email to the people responsible and remind them! Get user data... 

     try { 
      $stmt = $conn->prepare("SELECT * FROM users WHERE `uID` = :uid"); 
      $stmt->bindValue(':uid', $value['uID']); 
      $stmt->execute(); 
      $uRes = $stmt->fetchAll(); 
     } catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 

     // Add +1 to the incremental count 
     $a++; 

     // Collect some data for the log email 
     $arrA[] = $value['entryKey']."-"$value['entryID']; 
     $arrA[] = $value['entryName']; 
     $arrA[] = $value['entryTitle']; 
     $arrA[] = $value['dateStarted']; 
     $arrA[] = $value['lastModified']; 
     $arrA[] = $uRes[0]['title']." ".$uRes[0]['firstName']." ".$uRes[0]['lastName']; 
     $arrA[] = $uRes[0]['email']; 

Тогда это будет на послать каждый человек, который получает повернутый в этом if. Код для отправки электронной почты и т. Д. Отлично работает, поэтому вам не нужно все это утомлять. Один и тот же процесс повторяется каждый раз с другими параметрами - вы, вероятно, можете угадать, как это работает, наблюдая за другими численными значениями времени в верхней части. Так отпускает до конца этого (что, где вопрос лежит, после:

} 
} 

И вот теперь я хочу, чтобы вытащить все данные из $ Arra (а также соответствующие другие массивы $ КРРП и $ arrC), поэтому я могу поместить все в аккуратный стол, а затем отправить его администратору, чтобы они знали, что именно произошло, когда все это было запущено.

Моя проблема заключается в том, что я не знаю, как извлечь ее в удобном для использования способом , $ arrA. Если я var_dump($arrA);, я успешно получаю все, что должно быть там, но я не вижу способа заказать его в хорошем методе строки за строкой для каждого цикла. Я склонен в конечном итоге с этим при выполнении var_dump($arrA);:

array(14) { [0]=> string(15) "ABC-63" [1]=> string(36) "Fish and Chips" [2]=> string(33) "Cod Disposal" [3]=> string(22) "1447283057" [4]=> string(22) "1447286317" [5]=> string(21) "Mr Bob Smith" [6]=> string(22) "[email protected]" [7]=> string(15) "XYZ-104" [8]=> string(23) "Blue Socks" [9]=> NULL [10]=> string(22) "1447286691" [11]=> string(22) "1447326523" [12]=> string(20) "Mrs Rosie Jones" [13]=> string(34) "[email protected]" } 

Очевидно, что здесь имеется выход для двух записей данных. Я бы знать, как сформировать это в выходной сигнал, который будет в основном выглядеть следующим образом:

<tr> 
<td>ABC-63</td> 
<td>Fish and Chips</td> 
<td>Cod Disposal</td> 
<td>1447283057</td> 
<td>1447286317</td> 
<td>Mr Bob Smith</td> 
<td>[email protected]</td> 
</tr> 
<tr> 
<td>XYZ-104</td> 
<td>Blue Socks</td> 
<td>NULL</td> 
<td>1447286691</td> 
<td>1447326523</td> 
<td>Mrs Rosie Jones</td> 
<td>[email protected]</td> 
</tr> 

Таблица начала и конца, очевидно, будет на месте до и после цикла соответственно.

Как достичь этого результата из $ arrA? Нужно ли мне изменить способ хранения этих данных в массиве ранее, каким-то образом, чтобы иметь какой-то простой способ управлять этим выходом ближе к концу?

Заранее спасибо.

+0

Подумайте, что мой вывод может быть недостаточно ясен. Обновление результата желательно лучше понять ... – df0

ответ

0

Благодаря @quentinadam я был вдохновлен попробовать это. Это не тот угол, который я думал об использовании, но он работает.

echo "<table border=\"1\">\n<tbody><tr>\n"; 
$i = 0; 
foreach($arrA as $thing) { 
    if($i == 7) { 
     echo "</tr>\n<tr>\n"; 
    } 
    echo "<td>".$thing."</td>\n"; 
    $i++; 
    if($i == 8) { 
     $i = 1; 
    } else { 
     $i = $i; 
    } 
} 
echo "</tr></tbody>\n</table>\n\n"; 

Я бы проголосовал за quentinadam за то, что вы на правильном пути, но пока не можете голосовать.

1

Если я правильно понял, вы хотите вывести элементы $arrA, 7 элементов в строке.

Что вы можете сделать, это перебрать более $arrA, заполнив временный массив $line с элементами $arrA. Каждые 7 элементов линия будет заполнена. Затем вы можете сделать что-нибудь с ним, как эхо его стандартного вывода, добавив его в электронную почту, а затем сбросьте $line.

$line = []; 
for ($i = 0; $i < count($arrA); $i++) { 
    $line[] = $arrA[$i]; 
    if ($i % 7 == 6) { //line is filled up with 7 elements 
    echo implode($line, " | "); //output elements of line separated with pipe char 
    $email .= implode($line, " | ") . "\n"; //add the line to email body 
    $line = []; //reset line 
    } 
} 
+0

Пробовал ли это, чтобы узнать, что произошло. Только в результате возникли некоторые ошибки с ошибками 1245 Undefined .... – df0

+0

На самом деле я сделал свою собственную версию того, что вы делали, и кажется, что она работает! – df0

0

Это одно собирающийся помощь:

foreach($arrA as $index=>$value){ 
    echo($value.' |'); 
} 

Styling до вас. Но если вам нужна дополнительная помощь, держите меня в курсе.

+1

Спасибо, но это просто выплевывает все в массиве с трубкой после каждого элемента. Это не достижение того, что было желанием. Я уточнил результат, который вам нужен сейчас, можете ли вы посмотреть еще раз? Благодарю. – df0

+0

@ df0 конечно, но теперь вы уже решили проблему самостоятельно. Поздравления ! –

Смежные вопросы