Как напечатать значение c в массиве 2D в PHP, это не совсем 2D? - PullRequest
0 голосов
/ 21 января 2020

У меня есть массив в PHP, который создается из моей базы данных, который будет отформатирован следующим образом:

[  "Folder1", 
   ["Content1", "Content2", "Content3"], 
   "Folder2", 
   ["Content1", "Content2", "Content3"]
]

У меня есть текущий код для этого процесса

<?php

        $sql = ("SELECT FlashCardFolderName, FlashCardSetName FROM FlashCardFolders, FlashCardSets WHERE FlashCardFolderUserID = " . $_SESSION["id"] . " AND FlashCardSetFlashCardFolderID = FlashCardFolderID ORDER BY FlashCardFolderName");
        $result = $db->get_con()->query($sql);
        if($result->num_rows > 0){
            $temp = "";
            $foldersAndSets = array();
            $tempSet = array();
            while ($row = $result->fetch_assoc()){
                if($temp===$row["FlashCardFolderName"]){
                    array_push($tempSet, $row["FlashCardSetName"]);
                } else{
                    array_push($foldersAndSets, $tempSet);
                    $tempSet = array();
                    array_push($foldersAndSets, $row["FlashCardFolderName"]);
                    array_push($tempSet, $row["FlashCardSetName"]);;
                    $temp = $row["FlashCardFolderName"];
                }
            }
            array_push($foldersAndSets, $tempSet);
            array_shift($foldersAndSets);
            echo json_encode($foldersAndSets);
        } else{
            echo "<h6>Looks like there's nothing here...</h6>";
        }

        $length = sizeof($foldersAndSets);
        for ($i = 0; $i < $length; $i++){

            $secondDimension = sizeof($foldersAndSets[$i+1]);
            for($j = 0; $j < $foldersAndSets; $j++) {

            echo "$foldersAndSets[$i][$j+1]";
            }
        } 

    ?>

Но, похоже, все работает не так, как я хочу. Есть идеи, что я могу делать не так?

1 Ответ

0 голосов
/ 21 января 2020

Прежде всего, я предлагаю вам сделать полезный формат ваших входных данных, я имею в виду, что было бы лучше переформатировать ваш входной массив. Например, со структурой, подобной Папка -> Содержимое массива :

$reformatted = [];
$tmp = '';

foreach($foldersAndSets as $ind=>$txt){
    if ($ind % 2 == 0){          // if this is a 1-st, 3-rd, 5-th etc value -> Folders
        $reformatted[$txt] = [];
        $tmp = $txt;
    } else {                     // if this is a 2-nd, 4-th etc value -> Content
        $reformatted[$tmp] = $txt;
    }
} 

Это создаст массив, подобный:

Array
(
    [Folder1] => Array
        (
            [0] => Content1
            [1] => Content2
            [2] => Content3
        )

    [Folder2] => Array
        (
            [0] => Content1
            [1] => Content2
            [2] => Content3
        )

)

С этим массивом вы можете работать в дальнейшем. Теперь вы можете получить любое нужное вам значение с помощью простого foreach loop:

foreach($reformatted as $fold=>$cont){ 
        echo $fold.PHP_EOL.PHP_EOL;
    foreach($cont as $item){
        echo $item.PHP_EOL;
    }
    echo PHP_EOL;
}

Выход:

Folder1

Content1
Content2
Content3

Folder2

Content1
Content2
Content3

Демо

Примечание: вы можете заменить свою вторую часть (от $length = sizeof($foldersAndSets); и ниже) кода этим.

...