'PHP unreachable if statement in foreach

I have this code I have set up that is supposed to read from JSON and output each array. Except when I use my foreach loop, I have an unreachable if statement. It's supposed to reach it if "type" is "rawbr".

I have confirmed that this has nothing to do with foreach by placing the same message in a row.

I wish to output this:

UnknownUser3: hey hxor? [To you]
Welcome to chat!

Here is my code:

innerchat.php:

<?php
session_start();

function tf($oz){
    if($oz == 0){
        return false;
    } else if($oz == 1){
        return true;
    }
}

if(isset($_GET["room"]) && file_exists("data/".$_GET["room"].".json")){
    $jsonF = file_get_contents("data/".$_GET["room"].".json");
    $jsonD = json_decode($jsonF, true);
    echo count($jsonD["msg"]);
    // echo $jsonD["msg"][1]["type"];
    foreach($jsonD["msg"] as $key => $message){
        
        
        if($message["visibility"] !== "all"){
            if(isset($_SESSION["ts_user"]) && $_SESSION["ts_user"] == $message["visibility"] && $message["type"] != "rawbr"){
                echo "<font color='".$message["color"]."'><b><u>".$message["from"].":</u></b></font> ".htmlspecialchars($message["cont"])." [To you]<br />";
            } else if($message["type"] === "message" && $message["visibility"] === "all"){
                echo "<font color='".$message["color"]."'><b><u>".$message["from"].":</u></b></font> ".htmlspecialchars($message["cont"])." [normal message]<br />";
            } else if($message["type"] === "rawbr" && $message["visibility"] === "all"){
                echo $message["cont"]."<br />";
            }
        }
        
    }
}

kb6k.json (the room we're working with)

{"name":"KillerBot 6000","desc":"A room with very harsh moderation. Proceed with caution!","max":600,"color":"#e0e0e0","whispersenabled":true,"forbiddenCommands":["/milk", "/bal"],"msg":[{"cont":"hey, hxor?","time":1,"color":"black","type":"message","visibility":"HxOr1337","from":"UnknownUser1"},{"cont":"Welcome to the chat!","time":0,"type":"message","color":"black","visibility":"HxOr1337","from":"Test"}]}

I know it couldn't possibly do anything to do with the JSON itself, since the other values are nearly identical apart from "visibility"



Solution 1:[1]

Ok, so I figured out that I put those if statements in $message["visibility"] !== "all"

The code:

<?php
session_start();
if(isset($_GET["room"]) && file_exists("data/".$_GET["room"].".json")){
    $jsonF = file_get_contents("data/".$_GET["room"].".json");
    $jsonD = json_decode($jsonF, true);
    // echo $jsonD["msg"][1]["type"];
    foreach($jsonD["msg"] as $key => $message){
        
        
        if($message["visibility"] !== "all"){
            if(isset($_SESSION["ts_user"]) && $_SESSION["ts_user"] == $message["visibility"] && $message["type"] != "rawbr"){
                echo "<font color='".$message["color"]."'><b><u>".$message["from"].":</u></b></font> ".htmlspecialchars($message["cont"])." [To you]<br />";
            }
        } else {
             if($message["type"] === "message" && $message["visibility"] === "all"){
                echo "<font color='".$message["color"]."'><b><u>".$message["from"].":</u></b></font> ".htmlspecialchars($message["cont"])." [normal message]<br />";
            } else if($message["type"] === "rawbr" && $message["visibility"] === "all"){
                echo $message["cont"]."<br />";
            }
        }
        
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 HotPizza HotPizza