0

クエリされたデータベースから、これを取得しました

foreach ($child_posts as $child_post) {
 $child_id = $child_post->ID;
 $dayOfWeek = get_post_meta($child_id,'wpcf-day-of-week', true);
 $time = get_post_meta($child_id,'wpcf-time', true);

$class[] = array('day' => $dayOfWeek, 'time' => $time, 'value' => $child_id);
}

{"classes":[
{"day":"7","time":"1500","value":13574},
{"day":"7","time":"1800","value":13573},
{"day":"4","time":"1900","value":11346},
{"day":"6","time":"1100","value":11494},
{"day":"5","time":"1800","value":11362},
{"day":"7","time":"1700","value":13572},
{"day":"6","time":"1600","value":11498},
{"day":"6","time":"1500","value":11496}]}

日=月~日

時間 = 軍事時間

値 = 必要だが、並べ替えは必要ない

最初に日ごと、次に時間ごとに並べ替える必要があります。そして、データベースを元の形式に戻します

{"classes":[
{"day":"4","time":"1900","value":11346},
{"day":"5","time":"1800","value":11362},
{"day":"6","time":"1100","value":11494},
{"day":"6","time":"1500","value":11496},
{"day":"6","time":"1600","value":11498},
{"day":"7","time":"1500","value":13574},
{"day":"7","time":"1700","value":13572},
{"day":"7","time":"1800","value":13573}]}

PHPマニュアルの方法を試してみましたが、まだうまくいきません。

これは私がしたことです

foreach ($class as $key => $row) {
    $day[$key]  = $row['day'];
    $time[$key] = $row['time'];
    $value[$key] = $row['value'];

}

$class[] = array_multisort($day, SORT_DESC, $time, SORT_ASC, $class);

何を期待すべきかはわかっていますが、それを取得する方法がわかりません。うまくいけば、誰かがここで助けてくれるでしょう:)

私の元のスクリプト:

 $childargs = array(
 'post_type' => 'class',
 'numberposts' => -1,
 'meta_query' => array(array('key' => '_wpcf_belongs_instructor_id', 'value' => $instructor_post_id))
 );
 $child_posts = get_posts($childargs);

 //$child_posts = types_child_posts(‘class’);
 foreach ($child_posts as $child_post) {
  $child_id = $child_post->ID;
  $dayOfWeek = get_post_meta($child_id,'wpcf-day-of-week', true);
  $time = get_post_meta($child_id,'wpcf-time', true);

 $class[] = array('day' => $dayOfWeek, 'time' => $time, 'value' => $child_id);
 }

 echo json_encode(
   array("classes" => $class)
 )
 ?>
4

2 に答える 2

0
<?php

$json = '{"classes":[
          {"day":"7","time":"1500","value":13574},
          {"day":"7","time":"1800","value":13573},
          {"day":"4","time":"1900","value":11346},
          {"day":"6","time":"1100","value":11494},
          {"day":"5","time":"1800","value":11362},
         {"day":"7","time":"1700","value":13572},
         {"day":"6","time":"1600","value":11498},
       {"day":"6","time":"1500","value":11496}]}';


$array = json_decode($json,true);

$temp = $array['classes'];

foreach($temp as $key=>$value)
{
  $day[] = $value['day'];
  $time[] = $value['time'];
  }

array_multisort($day,SORT_ASC,$time,SORT_ASC,$temp);

$array['classes'] = $temp;

echo json_encode($array);
?>

コードを次のように変更してみてください。 $classes には json_decoded コンテンツが含まれていると想定しています。

$temp = $classes['classes'];

foreach ($temp as $key => $row) {
$day[]  = $row['day'];
$time[] = $row['time'];
$value[] = $row['value'];
}

 array_multisort($day, SORT_DESC, $time, SORT_ASC, $temp);
 $classes['classes'] = $temp;

 echo json_encode($classes);
于 2013-03-27T16:22:55.297 に答える
0

MYSql から返された行の配列を 1 列ずつ並べ替えます。ここでの問題は、コースをセッション (1,2) と期間 (1,2,3) で並べ替えることです。セッション = 3 の場合は、並べ替えと印刷用のテーブルを準備する際に両方を意味します。セッション == 3 の場合、行 1 を挿入します。 、および行 2 です。次に、並べ替えを行います。テーブルの内容は $coursesr にあります。

$ar = array();
if ($order == "session"){
    for ($i = 0; $i < count($coursesr); $i++){          
        $ar[0][] = (($coursesr[$i]['session'])*10)+$coursesr[$i]['period'];
        $ar[1][] = $i;
    }
    $b = array_multisort($ar[0],SORT_ASC,SORT_NUMERIC,$ar[1],SORT_ASC,SORT_NUMERIC);        
}else{
    for ($i = 0; $i < count($coursesr); $i++){          
        $ar[0][] = ucwords($coursesr[$i]['lastname']);
        $ar[1][] = $i;
    }
    array_multisort($ar[0],SORT_ASC,SORT_NATURAL,$ar[1],SORT_ASC,SORT_NUMERIC);
}

次に、$coursesr 配列から取得するには、インデックスを計算する必要があります...

for ($i = 0; $i < $num; $i++){
    $r = $coursesr[$ar[1][$i]]; // simplify reference   
    echo "<tr>";.....
于 2013-11-22T15:53:39.410 に答える