Ниже я добавил $ var_dump массива, который я создал с помощью пользовательских действий, включающих HTML-форму.
Я, конечно, готов рассмотреть другие стратегии для достижения конечного эффекта (и я, честно говоря, не уверен, что это не будет лучше достигнуто с помощью функций WordPress, так как это среда, в которой возникает эта проблема), но самая простая ответом было бы взять массив, описанный ниже, избавиться от ответов «NULL», а затем расположить по алфавиту ВСЕ оставшиеся наборы по фамилии (которую я изначально поставил первым, так как в более ранней, аналогичной версии той же задачи, которую он выполнял окончательная сортировка совсем несложно).
Вывод будет отображаться в списке для входа на мероприятии, где первый столбец будет пронумерован, во втором столбце будет отображаться имя — фамилия с названием компании внизу, строка подписи, строка, описывающая «тип билета» и цену билета.
ТАК, просто чтобы было легко представить:
№ ПЕРВЫЙ / ПОСЛЕДНЯЯ / компания ПОДПИСЬ БИЛЕТ ТИП ЦЕНА
(#) Эми Абрамс, Каролко ……… Участник $ 5
Для меня естественным способом было создать таблицу HTML, в которой каждая переменная, расположенная по какому-либо индексу, выводится через PHP. У меня было несколько версий, которые работали ПОЧТИ, включая циклы foreach в самых пределах моего понимания манипулирования массивами.
Я подозреваю, что человек, который может ответить на мой вопрос, мог бы написать то, что я пробовал во сне, но, просто для того, чтобы придать изюминку, не сбрасывая кучу больше кода … получив массив ниже в переменной с именем $ Мета, я мог бы пройти через это foreach ($meta as $reservation)
, затем выведите некоторые переменные, но не все, и не все в правильном порядке, с $reservation['first_name'][0]
, например. Я пытался сбросить $ i вместо [0] и дурачиться с другими комбинациями ключ / значение / итератор, но на данный момент я просто перебираю свой собственный внутренний массив ca. 999 неправильных против 1 правильных решений.
Я знаю, что это распространенный тип вопросов, но, просматривая темы здесь, я еще не нашел версию, на которую есть прямой ответ.
array(8) {
[0]=>
array(5) {
["last_name"]=>
NULL
["first_name"]=>
NULL
["price"]=>
NULL
["company"]=>
NULL
["ticket_type"]=>
NULL
}
[1]=>
array(5) {
["last_name"]=>
array(3) {
[0]=>
string(6) "Winger"[1]=>
string(6) "Dinger"[2]=>
string(7) "Stassen"}
["first_name"]=>
array(3) {
[0]=>
string(5) "Debra"[1]=>
string(3) "Hum"[2]=>
string(6) "Harold"}
["price"]=>
array(3) {
[0]=>
string(2) "10"[1]=>
string(2) "10"[2]=>
string(4) "6.35"}
["company"]=>
array(3) {
[0]=>
string(14) "Post Data Test"[1]=>
string(14) "Post Data Test"[2]=>
string(14) "Post Data Test"}
["ticket_type"]=>
array(3) {
[0]=>
string(16) "Shippable Ticket"[1]=>
string(16) "Shippable Ticket"[2]=>
string(14) "Special Ticket"}
}
[2]=>
array(5) {
["last_name"]=>
NULL
["first_name"]=>
NULL
["price"]=>
NULL
["company"]=>
NULL
["ticket_type"]=>
NULL
}
[3]=>
array(5) {
["last_name"]=>
array(3) {
[0]=>
string(9) "Mightwork"[1]=>
string(1) "u"[2]=>
string(3) "why"}
["first_name"]=>
array(3) {
[0]=>
string(9) "Bizarrely"[1]=>
string(11) "whatsamatta"[2]=>
string(8) "done no "}
["price"]=>
array(3) {
[0]=>
string(1) "5"[1]=>
string(4) "12.7"[2]=>
string(4) "12.7"}
["company"]=>
array(3) {
[0]=>
string(13) "Get Data Test"[1]=>
string(13) "Get Data Test"[2]=>
string(13) "Get Data Test"}
["ticket_type"]=>
array(3) {
[0]=>
string(16) "Shippable Ticket"[1]=>
string(14) "Special Ticket"[2]=>
string(14) "Special Ticket"}
}
[4]=>
array(5) {
["last_name"]=>
NULL
["first_name"]=>
NULL
["price"]=>
NULL
["company"]=>
NULL
["ticket_type"]=>
NULL
}
[5]=>
array(5) {
["last_name"]=>
array(2) {
[0]=>
string(7) "Marlatt"[1]=>
string(7) "Stewart"}
["first_name"]=>
array(2) {
[0]=>
string(4) "Jeff"[1]=>
string(3) "Al "}
["price"]=>
array(2) {
[0]=>
string(1) "0"[1]=>
string(1) "0"}
["company"]=>
array(2) {
[0]=>
string(23) "Jeff Marlatt Consulting"[1]=>
string(23) "Jeff Marlatt Consulting"}
["ticket_type"]=>
array(2) {
[0]=>
string(16) "testing defaults"[1]=>
string(16) "testing defaults"}
}
[6]=>
array(5) {
["last_name"]=>
NULL
["first_name"]=>
NULL
["price"]=>
NULL
["company"]=>
NULL
["ticket_type"]=>
NULL
}
[7]=>
array(5) {
["last_name"]=>
array(3) {
[0]=>
string(10) "Flintstone"[1]=>
string(10) "Flintstone"[2]=>
string(6) "Rubble"}
["first_name"]=>
array(3) {
[0]=>
string(4) "Fred"[1]=>
string(5) "Wilma"[2]=>
string(5) "Betty"}
["price"]=>
array(3) {
[0]=>
string(1) "0"[1]=>
string(1) "0"[2]=>
string(1) "0"}
["company"]=>
array(3) {
[0]=>
string(23) "Jeff Marlatt Consulting"[1]=>
string(23) "Jeff Marlatt Consulting"[2]=>
string(23) "Jeff Marlatt Consulting"}
["ticket_type"]=>
array(3) {
[0]=>
string(6) "MEMBER"[1]=>
string(6) "MEMBER"[2]=>
string(6) "MEMBER"}
}
}
Итак, во-первых, вы создали свой массив очень странным образом. Если все, что вы хотите сделать, это вывести все различные гостевые системы, то было бы лучше создать новый элемент в вашем массиве для каждого гостя, чтобы вы могли легко их отсортировать и выполнить итерации. Однако, как вы задали вопрос, я дам вам решение …
Чтобы иметь возможность сортировать ваш массив, нам нужно взять ваш массив и превратить его в массив, который я описал выше. Этот массив будет выглядеть примерно так …
array(
[0] => array(
[last_name] => 'blah',
[first_name] => 'blah',
[company] => 'blah',
[ticket_type] => 'blah',
[price] => 'blah',
),
[1] => array(
[last_name] => 'blah',
[first_name] => 'blah',
[company] => 'blah',
[ticket_type] => 'blah',
[price] => 'blah',
),
etc...
);
Тогда вы можете использовать функцию PHP usort()
отсортировать многомерный массив по значению подмассивов. Вот мое решение …
//This function is used by usort() to sort the guests array by last name
//UPDATE: this function is now case insensitive and sorts on first name secondarily
function sort_by_last_name( $a, $b ) {
//Convert values to lowercase to make sorting case insensitive
$a_firstname = strtolower( $a['first_name'] );
$a_lastname = strtolower( $a['last_name'] );
$b_firstname = strtolower( $b['first_name'] );
$b_lastname = strtolower( $b['last_name'] );
//If the last names are the same sort by first name
if( $a_lastname == $b_lastname ) {
return strcmp( $a_firstname, $b_firstname );
}
return strcmp( $a_lastname, $b_lastname );
}
//This function returns a nicely formatted array of
//reservations sorted alphabetically by last name
function sort_reservations( $reservations ) {
//If reservations is empty get outta there
if( !$reservations || !is_array( $reservations ) ) { return false; }
//Create an empty array to store the formatted data
$guests = array();
//Loop through reservations
foreach ( $reservations as $res ) {
//If the reservation is empty skip onto the next one
if( !$res['last_name'] ) { continue; }
//See how many people are in the reservation
$count = count( $res['last_name'] );
//iterate through reservation n number of times
for( $i = 0; $i <= $count - 1; $i++ ) {
//Add reservations to the nsorted guests array
$guests[] = array(
'last_name' => $res['last_name'][$i],
'first_name' => $res['first_name'][$i],
'price' => $res['price'][$i],
'company' => $res['company'][$i],
'ticket_type' => $res['ticket_type'][$i]
);
}
}
//sort gusts by last name alphabetically
usort( $guests, 'sort_by_last_name' );
//Return our nicely formatted and sorted array
return $guests;
}
Теперь, например, ваш неформатированный массив резервирований хранится в переменной $reservations
Вы можете отсортировать его с помощью …
$guests = sort_reservations( $reservations );
Затем вы строите свою таблицу в формате html, и для каждой строки таблицы вы можете перебирать этот массив, распечатывая нового гостя для каждой строки. как это….
<?php $guests = sort_reservations( $reservations ); ?>
<table>
<thead>
<tr>
<th class="firstname">First Name</th>
<th class="lastname">Last Name</th>
<th class="company">Company</th>
<th class="tickettype">Ticket Type</th>
<th class="price">Price</th>
</tr>
</thead>
<tbody>
<?php foreach( $guests as $guest ) { ?>
<tr>
<td class="firstname"><?php echo $guest['first_name']; ?></td>
<td class="lastname"><?php echo $guest['last_name']; ?></td>
<td class="company"><?php echo $guest['company']; ?></td>
<td class="tickettype"><?php echo $guest['ticket_type']; ?></td>
<td class="price">£<?php echo round( $guest['price'], 2 ); ?></td>
</tr>
<?php } ?>
</tbody>
</table>
И Боб твой дядя, у вас есть таблица гостей, отсортированных в алфавитном порядке по фамилиям.
надеюсь, это поможет
Дэн
Других решений пока нет …