как сделать заголовок при цикле через массив из элемента массива - PullRequest
0 голосов
/ 22 апреля 2019

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

   California (This should be heading)
   Los Angeles
   San Diego
   San Francisco

Мой массив выглядит следующим образом:

Array
    (
        [0] => Array
            (
                [id] => 14
                [post_id] => 319
                [location] => Atlanta, GA
                [address] => 161 Racetrack Rd., McDonough
                [city] => Atlanta
                [state] => Georgia
                [state_code] => GA
                [country] => USA
                [zipcode] => 30253
                [service_zipcode] => 
                [phone] => 
                [fax] => 
                [email] => 
                [facebook] => 
                [twitter] => 
                [linkedin] => 
                [gplus] => 
                [latitude] => 
                [longitude] => 
                [url] => 
                [created_at] => 2019-04-22 07:22:55
                [updated_at] => 2019-04-22 07:26:31
            )

        [1] => Array
            (
                [id] => 16
                [post_id] => 321
                [location] => Augusta, Georigia
                [address] => 1446 Harper Street
                [city] => Augusta
                [state] => Georigia
                [state_code] => GA
                [country] => USA
                [zipcode] => 
                [service_zipcode] => 
                [phone] => 
                [fax] => 
                [email] => 
                [facebook] => 
                [twitter] => 
                [linkedin] => 
                [gplus] => 
                [latitude] => 
                [longitude] => 
                [url] => 
                [created_at] => 2019-04-22 07:29:33
                [updated_at] => 2019-04-22 07:32:25
            )

        [2] => Array
            (
                [id] => 12
                [post_id] => 317
                [location] => Savannah, Georgia
                [address] => 834 Northside Dr. East
    Statesboro
                [city] => Savannah
                [state] => Georgia
                [state_code] => GA
                [country] => USA
                [zipcode] => 30458
                [service_zipcode] => 
                [phone] =>
                [fax] => 
                [email] => 
                [facebook] => 
                [twitter] => 
                [linkedin] => 
                [gplus] => 
                [latitude] => 
                [longitude] => 
                [url] => 
                [created_at] => 2019-04-22 07:15:43
                [updated_at] => 2019-04-22 07:18:11
            )

    )

Так, когда есть города, имеющие одно и то же состояние, они должны отображать состояние в качестве заголовка в первый раз. В моем массиве есть только данные только для одного состояния, но они учитываются для нескольких состояний. Можно ли как-нибудь сделать для этого уникальный заголовок?

Обновление: мой код

<code><div class="row">
            <div class="col-md-12 contentside">



                    <div class="locations-container">
                       <?php 
                        global $wpdb;

                        $querystr = "
                            SELECT DISTINCT meta_value 
                            FROM $wpdb->postmeta 
                            WHERE meta_key = 'state_code' 
                            ORDER BY meta_value ASC
                        ";

                        $us_states = $wpdb->get_results( $querystr );
                        //echo "<pre>"; print_r($us_states); echo "<pre>";
                        foreach($us_states as $us_state) { ?>
                            <?php $locations = \abc\Helper\Location::getLocationsByState($us_state->meta_value); ?>
                            <h2>Here I want to display heading for state but it is outside loop</h2>
                            <?php //echo "<pre>"; print_r($locations); echo "
";?> <? php foreach ($ location как $ location):?>

Охотники на комаров из <? Php echo $ location ['location']; ?>

<? php endforeach; ?> <? php}?>

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Если вы используете array_column, вы можете получить плоский массив с состоянием в качестве значения и городом в качестве ключа.
Затем сортируйте массив с помощью asort для сохранения ключей и сортируйте их по состоянию.

Следите за состоянием штата, когда оно меняется, и отображайте города ниже штата.

$arr = array_column($locations, "state", "city");
asort($arr);
$prev = null;

foreach($arr as $city => $state){
    if($state != $prev){
        echo PHP_EOL . PHP_EOL . $state . PHP_EOL;
        $prev = $state;
    }
    echo "---" . $city . PHP_EOL;
}

https://3v4l.org/gfcia

Пример вывода:

Georgia
---Atlanta
---Savannah


Georigia
---Augusta


Texas
---Huston
0 голосов
/ 22 апреля 2019

Шаги для реализации:

1) Пожалуйста, переберите текущий массив.

2) Создайте новый пустой массив.

3) Добавьте к новому массиву с помощью country в качестве ключа,

4) Добавить к новому массиву с state в качестве ключа,

Теперь зациклите новый массив и напечатайте страну и состояние в отдельной строке.

<?php
$locations = Array(
        Array
            (
                'id' => 14,
                'post_id' => 319,
                'location' => 'Atlanta, GA',
                'address' => '161 Racetrack Rd., McDonough',
                'city' => 'Atlanta',
                'state' => 'Georgia',
                'state_code' =>'GA',
                'country' => 'USA',
                'zipcode' => 30253,
                'service_zipcode' => '',
                'phone' => '',
                'fax' => '',
                'email' => '',
                'facebook' => '',
                'twitter' => '',
                'linkedin' => '',
                'gplus' => '',
                'latitude' => '',
                'longitude' => '',
                'url' => '',
                'created_at' => '2019-04-22 07:22:55',
                'updated_at' => '2019-04-22 07:26:31',
            ),
            Array
            (
                'id' => 16,
                'post_id' => 321,
                'location' => 'Augusta, Georigia',
                'address' => '1446 Harper Street',
                'city' => 'Augusta',
                'state' => 'Georigia',
                'state_code' => 'GA',
                'country' => 'USA',
                'zipcode' => '',
                'service_zipcode' => '',
                'phone' => '',
                'fax' => '',
                'email' => '',
                'facebook' => '',
                'twitter' => '',
                'linkedin' => '',
                'gplus' => '',
                'latitude' => '',
                'longitude' => '',
                'url' => '',
                'created_at' => '2019-04-22 07:29:33',
                'updated_at' => '2019-04-22 07:32:25',
            ),
            Array
            (
                'id' => 12,
                'post_id' => 317,
                'location' => 'Savannah, Georgia',
                'address' => '834 Northside Dr. East, Statesboro',
                'city' => 'Savannah',
                'state' => 'Georgia',
                'state_code' => 'GA',
                'country' => 'USA',
                'zipcode' => 30458,
                'service_zipcode' => '',
                'phone' => '',
                'fax' => '',
                'email' => '',
                'facebook' => '',
                'twitter' => '',
                'linkedin' => '',
                'gplus' => '',
                'latitude' => '',
                'longitude' => '',
                'url' => '',
                'created_at' => '2019-04-22 07:15:43',
                'updated_at' => '2019-04-22 07:18:11',
            )

    );
$hierarchy = [];
if (! empty($locations)) {
 foreach ($locations as $location) {
  $hierarchy[$location['country']][$location['state']] = $location;
 }
}

if (! empty($hierarchy)) {
 foreach ($hierarchy as $country => $location) {
  echo "<br/>" . $country;
  if (! empty($hierarchy[$country])) {
   foreach ($hierarchy[$country] as $state => $city) {
    echo "<br/>--> " . $state;
    echo "<br/>----> " . $city['city'];
   }
  }
 }
}

Выход:

USA
--> Georgia
----> Savannah
--> Georigia
----> Augusta

Where `USA` -> Country Name
Starting with `-->`: state name
Starting with `---->`: city name

Демонстрационная версия:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...