moh
moh

Reputation: 443

cant get value in switch condition

in this code im checking user input value that match my array key or not i want to put the defualt pure value in default section of switch condition but it echo empety value why switch default not working what is my mistake thankyou

i added a else statment for if condition but it return valuse many time i dont want this

 const EMOJI = [
        ":lol" => "emoji/0046.gif",
        ":d" => "emoji/0055.gif",
        ":|" => "emoji/poker.png",
        ":(" => "emoji/0005.gif",
        ":cool" => "emoji/0038.gif",
        ":shy" => "emoji/0001.gif",
        ":)" => "emoji/0003.gif",
        ":p" => "emoji/0008.gif",
        ":h" => "emoji/0031.gif",
        ":search" => "emoji/0042.gif",
        ":'(" => "emoji/0057.gif",
        ":cry" => "emoji/0048.gif",
        ":think" => "emoji/0052.gif",
        ":y" => "emoji/0053.gif",
        ":@" => "emoji/0052.gif",
        ":xd" => "emoji/0056.gif",
        ":punch" => "emoji/0063.gif",
        ":*" => "emoji/0064.gif",
        ":angle" => "emoji/0065.gif",
        ":sick" => "emoji/0013.gif",
        ":flower" => "emoji/0067.gif"
    ];


    if ($_POST['method'] === 'fetch') {
        $messages = $chat->fetchMessage();

        if (!empty($messages)) {
            foreach ($messages as $key => $value) { ?>

            <div class="message" id="<?php echo $value['message_id'] ?>">
                <p class="username"><?php echo $value['username']; ?></p><span style="font-size: 12px">say:</span>
                <?php


                $value = strtolower($value['message']);
                $arraykey = array_keys(EMOJI);
                for ($i = 0; $i < count($arraykey); $i++) {
                    if (preg_match_all("~" . preg_quote($arraykey[$i], '~') . "~", $value, $match)) {
                        switch ($match[0][0]) {
                            case ":lol":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":lol"].'"', $value);
                                echo $one;
                                break;
                            case ":d":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":d"].'"', $value);
                                echo $one;
                                break;
                            case ":|":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":|"].'"', $value);
                                echo $one;
                                break;
                            case ":(":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":("].'"', $value);
                                echo $one;
                                break;
                            case ":cool":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":cool"].'"', $value);
                                echo $one;
                                break;
                            case ":shy":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":shy"].'"', $value);
                                echo $one;
                                break;
                            case ":)":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":)"].'"', $value);
                                echo $one;
                                break;
                            case ":P":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":p"].'"', $value);
                                echo $one;
                                break;
                            case ":h":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":h"].'"', $value);
                                echo $one;
                                break;
                            case ":search":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":search"].'"', $value);
                                echo $one;
                                break;
                            case ":'(":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":'("].'"', $value);
                                echo $one;
                                break;
                            case ":cry":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":cry"].'"', $value);
                                echo $one;
                                break;
                            case ":think":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":think"].'"', $value);
                                echo $one;
                                break;
                            case ":y":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":y"].'"', $value);
                                echo $one;
                                break;
                            case ":@":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":@"].'"', $value);
                                echo $one;
                                break;
                            case ":xd":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":xd"].'"', $value);
                                echo $one;
                                break;
                            case ":punch":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":punch"].'"', $value);
                                echo $one;
                                break;
                            case ":*":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":*"].'"', $value);
                                echo $one;
                                break;
                            case ":angle":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":angle"].'"', $value);
                                echo $one;
                                break;
                            case ":sick":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":sick"].'"', $value);
                                echo $one;
                                break;
                            case ":flower":
                                $one = str_replace($match[0], '<img src=" '.EMOJI[":flower"].'"', $value);
                                echo $one;
                                break;
                            default:
                                echo $value;
                        }

                    } ?>
                    </div>
                    <?php
                }
            }
        } else {
            echo "empety message";
        }

    } 

Upvotes: 1

Views: 46

Answers (1)

u_mulder
u_mulder

Reputation: 54841

Much simplified version of what you're trying to achieve:

const EMOJI = [
    ":lol" => "emoji/0046.gif",
    ":d" => "emoji/0055.gif",
    ":|" => "emoji/poker.png",
    ":(" => "emoji/0005.gif",
    ":cool" => "emoji/0038.gif",
    ":shy" => "emoji/0001.gif",
    ":)" => "emoji/0003.gif",
    ":p" => "emoji/0008.gif",
    ":h" => "emoji/0031.gif",
    ":search" => "emoji/0042.gif",
    ":'(" => "emoji/0057.gif",
    ":cry" => "emoji/0048.gif",
    ":think" => "emoji/0052.gif",
    ":y" => "emoji/0053.gif",
    ":@" => "emoji/0052.gif",
    ":xd" => "emoji/0056.gif",
    ":punch" => "emoji/0063.gif",
    ":*" => "emoji/0064.gif",
    ":angle" => "emoji/0065.gif",
    ":sick" => "emoji/0013.gif",
    ":flower" => "emoji/0067.gif"
];

// Here we get keys of EMOJI array
$keys = array_keys(EMOJI);
// Escape special symbols in each key
foreach ($keys as &$k) {
    $k = str_replace(['|', '(', ')', '*'], ['\|', '\(', '\)', '\*'], $k);
}

// Test string
$str = ':flower :@ Yeah :( :*';
// Pattern
$pattern = '~(' . implode(')|(', $keys) . ')~';

// Replacing
$r = preg_replace_callback(
    $pattern,
    function($m) {
        return EMOJI[$m[0]];
        // Wrap in `img` tag
        // return '<img src="' . EMOJI[$m[0]] . '">';
    },
    $str
);

// Output `emoji/0067.gif emoji/0052.gif Yeah emoji/0005.gif emoji/0064.gif`
echo $r;    

And a supershort version is:

const EMOJI = [
    ":lol" => "emoji/0046.gif",
    ":d" => "emoji/0055.gif",
    ":|" => "emoji/poker.png",
    ":(" => "emoji/0005.gif",
    ":cool" => "emoji/0038.gif",
    ":shy" => "emoji/0001.gif",
    ":)" => "emoji/0003.gif",
    ":p" => "emoji/0008.gif",
    ":h" => "emoji/0031.gif",
    ":search" => "emoji/0042.gif",
    ":'(" => "emoji/0057.gif",
    ":cry" => "emoji/0048.gif",
    ":think" => "emoji/0052.gif",
    ":y" => "emoji/0053.gif",
    ":@" => "emoji/0052.gif",
    ":xd" => "emoji/0056.gif",
    ":punch" => "emoji/0063.gif",
    ":*" => "emoji/0064.gif",
    ":angle" => "emoji/0065.gif",
    ":sick" => "emoji/0013.gif",
    ":flower" => "emoji/0067.gif"
];
$str = ':flower :@ Yeah :( :*';
$r = strtr($str, EMOJI);
// Output `emoji/0067.gif emoji/0052.gif Yeah emoji/0005.gif emoji/0064.gif`
echo $r;

Upvotes: 2

Related Questions