-5
{"2":[[[["16","23:00"]],["18","22:00"]]],"1":[["20","20:00"]]}

次のような値を動的に出力する必要があります。

<p> 2 </p>
      <ul>
        <li>16 ---- 23:00 </li>
        <li>18 ---- 22:00 </li>
     </ul>
<p> 1 </p>
      <ul>
        <li>20 --- 20:00</li>
     </ul>

関数 json_decode() によって返される配列データです。上記の例のように印刷するにはどうすればよいですか...ありがとう。サイクルを使用する必要があることはわかっていますが、それを構築するのを手伝ってくれる人はいますか?

Array
(
    [2] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 16
                                    [1] => 23:00
                                )

                        )

                    [1] => Array
                        (
                            [0] => 18
                            [1] => 22:00
                        )

                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 20
                    [1] => 20:00
                )

        )

)

問題、値を表示する必要があるときに配列を表示し、次のようなものを返します:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 14
                                    [1] => 23:00
                                )

                        )

                    [1] => Array
                        (
                            [0] => 19
                            [1] => 21:00
                        )

                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 15
                                    [1] => 23:00
                                )

                        )

                    [1] => Array
                        (
                            [0] => 17
                            [1] => 20:00
                        )

                )

        )

)

1

    Array----
    19----21:00

2

    Array----
    17----20:00
4

2 に答える 2

2

json_decode関数を使用できます

例:

<?php
$a = json_decode('{"2":[[["16","23:00"],["18","22:00"]]],"1":[[["20","20:00"]]]}',true);
foreach($a as $i=>$b){
    echo "<p>";
    echo $i;
    echo "<ul>";
    foreach($b as $c){
        foreach($c as $d){
            echo "<li>";
            echo $d[0] . "----" . $d[1];
            echo "</li>";
        }
    }
    echo "</ul>";
    echo "</p>";
}
?> 
于 2013-01-24T20:51:54.533 に答える
2

配列を平坦化する必要があります。これを試してください:

<?
function array_flatten_recursive($array) {
   if (!$array) return false;
   $flat = array();
   $RII = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
   foreach ($RII as $value) $flat[] = $value;
   return $flat;
}

$jencoded = '{"2":[[[["16","23:00"]],["18","22:00"]]],"1":[["20","20:00"]]}';
$jdecoded = json_decode($jencoded);

foreach ($jdecoded as $paragraph => $paragraph_values) {
        echo "<p> $paragraph </p>\n";

        echo "   <ul>\n";
        $flattened = array_flatten_recursive($paragraph_values);
        for ($i=1; $i<count($flattened); $i+=2) {
                echo "      <li>";
                echo $flattened[$i-1];
                echo " ---- ";
                echo $flattened[$i];
                echo " </li>\n";
        }
        echo "   </ul>\n";
}
?>

質問の作成者によるコメントで要求されているように、以下のコードを使用して、出力を段落 ID で並べ替えることができます。各段落データは時間順にソートされます。

<?

$jencoded = '{"2":[[[["16","23:00"]],["18","22:00"]]],"1":[["20","20:00"]]}';

function array_flatten_recursive($array) { 
   if (!$array) return false;
   $flat = array();
   $RII = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
   foreach ($RII as $value) $flat[] = $value;
   return $flat;
}
function array_compare_by_time( $a, $b )
{
  if ($a->value == $b->value) { return 0; } 
  return ($a->value < $b->value) ? -1 : 1;
}

function array_sort_by_time($array) {
        //print_r($array);
        $a = array();

        for ($i=1; $i<count($array); $i+=2) {
                $o = new stdClass;
                $o->key = $array[$i-1];
                $o->value = $array[$i];
                $a[] = $o;
        }
        usort($a,'array_compare_by_time');
        return (array) array_flatten_recursive((array)$a);
} 

$jdecoded = (array)json_decode($jencoded);
asort($jdecoded, SORT_NUMERIC);

foreach ($jdecoded as $paragraph => $paragraph_values) {
        echo "<p> $paragraph </p>\n";

        echo "   <ul>\n";
        $flattened = array_flatten_recursive($paragraph_values);
        $flattened = array_sort_by_time($flattened);

        for ($i=1; $i<count($flattened); $i+=2) {
                echo "      <li>";
                echo $flattened[$i-1];
                echo " ---- ";
                echo $flattened[$i];
                echo " </li>\n";
        }

        echo "   </ul>\n";
}
?>

出力は次のとおりです。

<p> 1 </p>
   <ul>
      <li>20 ---- 20:00 </li>
   </ul>
<p> 2 </p>
   <ul>
      <li>18 ---- 22:00 </li>
      <li>16 ---- 23:00 </li>
   </ul>
于 2013-01-24T21:39:11.643 に答える