[英]PHP Group By value - JSON
我有以下JSON數據:
"slots": [
{
"start": "2017-02-09 08:00:00",
"end": "2017-02-09 08:20:00"
},
{
"start": "2017-02-09 08:20:00",
"end": "2017-02-09 08:40:00"
},
{
"start": "2017-02-09 08:40:00",
"end": "2017-02-09 09:00:00"
},
{
"start": "2017-02-10 08:40:00",
"end": "2017-02-10 09:00:00"
},
{
"start": "2017-02-10 09:00:00",
"end": "2017-02-10 09:20:00"
},
{
"start": "2017-02-10 09:20:00",
"end": "2017-02-10 09:40:00"
}
我想將dateTime“ start”拆分為$ date和$ time。 它可以這樣工作:
echo '<select name="reservationDate" id="test">';
foreach($slots_start as $option){
$dateTime = $option->start;
list($date, $time) = explode(" ", $dateTime);
echo '<option value=' . $date. '>' . $date . '</option>';
}
echo '</select>';
通過上面的代碼,我看到了下拉列表,其中所有值均被$ date分割。
現在,我想按$ date分組,然后在另一個選擇下拉列表中顯示$ time分組。
請參閱方案: 圖像方案
您可以先將數據分組,然后再填充兩個下拉列表。
<?php
// group data
$grouped = [];
foreach($slots_start as $option){
$dateTime = $option->start;
list($date, $time) = explode(" ", $dateTime);
if (isset($grouped[$date])) {
$grouped[$date][] = $time;
} else {
$grouped[$date] = [$time];
}
}
然后輸出兩個下拉列表。
您可以使用以下日期數組
$dates = array_keys($grouped);
與該日期相關的每次時間:
$times = $grouped[$date];
這樣,您將獲得更多可維護的代碼。 希望能幫助到你。
PHP的與:
<select name="company" id="select_company">
<option>Select...</option>
<option value="1">Italy</option>
</select>
<select name="reservationDate" id="firstSelect">
<option>Seleziona date</option>
</select>
//ajax
$('#select_company').on('change', function(e) {
e.preventDefault(); // Prevent Default Submission
$.ajax({
url: 'my_page.php',
type: 'POST',
data: $(this).serialize()
})
.done(function(data){
$('#firstSelect').hide(function(){
$('#firstSelect').show().html(data);
});
})
.fail(function(){
alert('Errore nel caricamento');
});
});
而my_page.php具有:
<?php
if(isset($_POST))
{
...//my code for get json array
$times = array();
foreach($slots_start as $option){
list($date, $time) = explode(" ", $option->start);
if (!array_key_exists($date, $times)){
$times[$date] = array();
}
if (!in_array($time, $times[$date])){
$times[$date][] = $time;
}
}
echo '<select name="reservationDate" id="firstSelect" onchange="fillSecond()">';
foreach (array_keys($times) as $date){
echo '
<option value="' . $date. '">' . $date . '</option>';
}
echo '</select>';
echo '<select name="reservationTime" id="secondSelect"></select>';
?>
<script language="javascript">
function fillSecond(){
firstSelectElement = document.getElementById('firstSelect');
secondSelectElement = document.getElementById('secondSelect');
times = date_options[firstSelectElement.selectedIndex];
while (secondSelectElement.options.length > 0) {
secondSelectElement.remove(0);
}
for(var i = 0; i < times.length; i++) {
var new_option = document.createElement('option');
new_option.innerHTML = times[i];
new_option.value = times[i];
secondSelectElement.appendChild(new_option);
}
}
date_options = [];
<?php
foreach($times as $date => $times){
echo "date_options.push([]);";
foreach ($times as $time){
echo "date_options[date_options.length - 1].push('$time');";
}
}
?>
fillSecond();
</script>
<?php
}?>
您需要使用php創建javascript數組。
https://jsfiddle.net/bruvygjf/
<?php
$json_str =<<<EOF
[
{
"start": "2017-02-09 08:00:00",
"end": "2017-02-09 08:20:00"
},
{
"start": "2017-02-09 08:20:00",
"end": "2017-02-09 08:40:00"
},
{
"start": "2017-02-09 08:40:00",
"end": "2017-02-09 09:00:00"
},
{
"start": "2017-02-10 08:40:00",
"end": "2017-02-10 09:00:00"
},
{
"start": "2017-02-10 09:00:00",
"end": "2017-02-10 09:20:00"
},
{
"start": "2017-02-10 09:20:00",
"end": "2017-02-10 09:40:00"
}
]
EOF;
$slots = json_decode($json_str);
$times = array();
foreach($slots as $option){
list($date, $time) = explode(" ", $option->start);
if (!array_key_exists($date, $times)){
$times[$date] = array();
}
if (!in_array($time, $times[$date])){
$times[$date][] = $time;
}
}
echo '<select name="reservationDate" id="firstSelect" onchange="fillSecond()">';
foreach (array_keys($times) as $date){
echo '
<option value="' . $date. '">' . $date . '</option>';
}
echo '</select>';
echo '<select name="reservationTime" id="secondSelect"></select>';
?>
<script language="javascript">
function fillSecond(){
firstSelectElement = document.getElementById('firstSelect');
secondSelectElement = document.getElementById('secondSelect');
times = date_options[firstSelectElement.selectedIndex];
while (secondSelectElement.options.length > 0) {
secondSelectElement.remove(0);
}
for(var i = 0; i < times.length; i++) {
var new_option = document.createElement('option');
new_option.innerHTML = times[i];
new_option.value = times[i];
secondSelectElement.appendChild(new_option);
}
}
date_options = [];
<?php
foreach($times as $date => $times){
echo "date_options.push([]);";
foreach ($times as $time){
echo "date_options[date_options.length - 1].push('$time');";
}
}
?>
fillSecond();
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.