我正在学习PHP中的数组。我正在研究多维数组,在其中我面临一个问题。我想打印的输出基础上的地点和日期也。
下面是示例多维数组的说明:
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
)
)下面是我想要的输出:
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帮助我的伙计们
我现在的代码是:
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'];
}我设法搜索它的地点,但我无法打印它的日期。
发布于 2017-10-12 22:14:50
您可以使用乌斯托或乌萨特根据一个或多个键对多维数组进行排序。例如,您可以根据地点和日期对其进行排序,然后对结果进行迭代并打印出来。
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 '...';
}或者,您可以迭代多维数组,并将其转换为更合适的结构。
$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。
一种方法是在约会的第一部分分割频闪时间(),然后比较产生的时间戳。就像这样:
function compare_date($a, $b) {
return strtotime(substr($a, 0, strpos($a, '-'))) - strtotime(substr($b, 0, strpos($b, '-')));
}发布于 2017-10-12 22:32:10
你需要安排一些我们可以“点菜”的日期。如果你这样做,你可以再运行一次。( php7的方式)希望这是helpfull...edit,有点乱七八糟的代码,但也许你会明白:)
/*-----( 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>';
}https://stackoverflow.com/questions/46719488
复制相似问题