1

下面我附加了我通过涉及 HTML 表单的用户操作创建的数组的 $var_dump。

我当然愿意考虑其他实现最终效果的策略(老实说,我并不肯定通过 WordPress 功能不会更好地实现它,因为这是问题所在的环境),但最简单的答案是采用下面描述的数组,去掉“NULL”响应,然后按姓氏对所有剩余的集合进行字母排序(我最初把它放在前面,因为它碰巧做了相同任务的早期类似版本最后的排序很快)。

输出将出现在活动的登录列表中,第一列编号,第二列显示名字 - 姓氏,下面有公司,签名行,描述“门票类型”的行和门票价格。

所以,只是为了便于描绘:

No. FIRST/LAST/company SIGNATURE TICKET TYPE 价格

(#) Amy Abrams, Carolco ......... 会员 $5

对我来说,自然的方法是生成一个 HTML 表,其中每个变量(由某种索引定位)通过 PHP 输出。我有一些几乎可以工作的版本,在我对数组操作的理解范围内涉及 foreach 循环。

我怀疑可以回答我的问题的人可以写下我在他或她的睡眠中尝试过的东西,但是,只是为了给一种味道而不会倾倒更多的代码......在一个名为 $ 的变量中获得了下面的数组meta,我可以遍历它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"
    }
  }
}
4

1 回答 1

0

所以首先你以一种非常奇怪的方式构建了你的数组。如果您只想输出所有不同的客人,最好在您的数组中为每个客人创建一个新元素,这样您就可以轻松地对它们进行排序和迭代。但是,正如您提出的问题,我会给您一个解决方案...

为了能够对您的数组进行排序,我们需要获取您的数组并将其转换为我上面描述的数组。这个数组看起来像这样......

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">&pound;<?php echo round( $guest['price'], 2 ); ?></td>

            </tr>

        <?php } ?>

    </tbody>

</table>

鲍勃是你的叔叔,你有一张按姓氏字母顺序排列的客人桌。

希望有帮助

于 2015-02-20T13:04:49.673 回答