首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试沿着多维数组搜索并打印出所需的输出

尝试沿着多维数组搜索并打印出所需的输出
EN

Stack Overflow用户
提问于 2017-10-12 21:55:53
回答 2查看 20关注 0票数 0

我正在学习PHP中的数组。我正在研究多维数组,在其中我面临一个问题。我想打印的输出基础上的地点和日期也。

下面是示例多维数组的说明:

代码语言:javascript
复制
 Array
(
    [0] => Array
        (
            [venue] => chicago
            [course] => science
            [time] => 2pm
            [date]=>jan2016-feb-2017

        )

    [1] => Array
        (
             [venue] => newyork
            [course] => robotics
            [time] =>3pm
            [date]=>jan2016-feb-2017
        )

    [2] => Array
        (
            [venue] => newyork
            [course] => science
            [time] => 4pm
              [date]=>mar2017-feb-2018
        )
     [3] => Array
        (
            [venue] => chicago
            [course] => robtics
            [time] => 4pm
            [date]=>mar2017-feb-2018
        )
 [4] => Array
        (
            [venue] => chicago
            [course] => robotics
            [time] => 2pm
            [date]=>jan2016-feb-2017

        )
  [5] => Array
        (
            [venue] => chicago
            [course] => science
            [time] => 4pm
            [date]=>mar2017-feb-2018

        )
 [6] => Array
        (
             [venue] => newyork
            [course] => robotics
            [time] =>1pm
            [date]=>mar2017-feb-2018
        )

    [7] => Array
        (
            [venue] => newyork
            [course] => science
            [time] => 5pm
              [date]=>mar2017-feb-2018
        )

)

下面是我想要的输出:

代码语言:javascript
复制
chicago
Date:jan2016-feb-2017
science  2pm
robotics  2pm 

chicago
Date:mar2017-feb-2018
science  4pm
robotics  4pm 


newyork 
Date:jan2016-feb-2017
science 4pm
robotics 3pm 

newyork 
Date:mar2017-feb-2018
science 5pm
robotics 1pm 

我想打印的输出基础上的地点和日期also.please帮助我的伙计们

我现在的代码是:

代码语言:javascript
复制
usort($events, function($a, $b) {
    return strcmp($a['venue'], $b['venue']);
});
$previousVenue = null;
foreach ($events as $event) {

    // check if this venue is the same as the previous, output header if not
    if ($event['venue'] != $previousVenue) {
        echo "<h3>$event[venue]</h3>";
        echo "$event[date]";
    }
    // always output course and time
    echo "$event[course] $event[time]<br>";

    // current venue becomes previous venue
    $previousVenue = $event['venue'];
}

我设法搜索它的地点,但我无法打印它的日期。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 22:14:50

您可以使用乌斯托乌萨特根据一个或多个键对多维数组进行排序。例如,您可以根据地点和日期对其进行排序,然后对结果进行迭代并打印出来。

代码语言:javascript
复制
uasort($events, function($a, $b) {
    $venueComparison = strcmp($a['venue'], $b['venue']);
    if (!$venueComparison) {
        return compare_date($a['date'], $b['date']);
    }
});

foreach ($events as $event) {
    echo '...';
}

或者,您可以迭代多维数组,并将其转换为更合适的结构。

代码语言:javascript
复制
$groupedEvents = array();
foreach ($events as $event) {
    if (!array_key_exists($event['venue'], $groupedEvents)) {
        $groupedEvents[$event['venue']] = array();
    }
    $groupedEvents[$event['venue']][] = $event;
}

foreach ($groupedEvents as $venue => $events) {
    usort($events, 'compare_date');
    foreach ($events as $event) {
        echo '...';
    }
}

无论哪种方式,您都需要一些分析日期范围并对其进行排序的内容。您需要自己进行解析,然后决定是按照开始日期还是结束日期进行排序。

或者,如果可能的话,您可以切换到更容易排序的日期范围格式。例如ISO 8601。

一种方法是在约会的第一部分分割频闪时间(),然后比较产生的时间戳。就像这样:

代码语言:javascript
复制
function compare_date($a, $b) {
    return strtotime(substr($a, 0, strpos($a, '-'))) - strtotime(substr($b, 0, strpos($b, '-')));
}
票数 0
EN

Stack Overflow用户

发布于 2017-10-12 22:32:10

你需要安排一些我们可以“点菜”的日期。如果你这样做,你可以再运行一次。( php7的方式)希望这是helpfull...edit,有点乱七八糟的代码,但也许你会明白:)

代码语言:javascript
复制
   /*-----( example array )------*/
        $arr =  array(
           array(
               'venue' => 'chicago',
               'course' => 'science',
               'time' => '2pm',
               'date' => 'jan2016-feb-2017',
           ),
           array(
               'venue' => 'amsterdam',
               'course' => 'science',
               'time' => '4pm',
               'date' => 'jan2016-feb-2017',
           ),
           array(
               'venue' => 'chicago',
               'course' => 'science',
               'time' => '2pm',
               'date' => 'jan2016-feb-2017',
           ),
        );

        /*-----( remove dublicates )-----*/
        $s = array_map('serialize', $arr);
        $u = array_unique($s);
        $arr = array_intersect_key($arr, $u);

        /*-----( sort based on venue)------*/
        usort($arr, function($a, $b) {
            return $a['venue'] <=> $b['venue'];
        });

        /*----( edit, order on dates )----*/
        foreach($arr as $k => $a)
        {
            $t = explode('-',$a['date']);
            $arr[$k]['t_date'] = isset($t[0]) ? $t[0] :null;
        }

        usort($arr, function($a, $b) {
            return $a['t_date'] <=> $b['t_date'];
        });

        /*----( output )----*/
        foreach($arr as $a)
        {
            foreach($a as $k => $v)
            {
                echo $k == 'venue' ? $v : $k.' '.$v;
                echo '<br>';
            }
            echo '<br>';
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46719488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档