使用数组键和数组值切换语句?

时间:2013-11-27 05:25:06

标签: php arrays switch-statement

我正在尝试编写一个脚本,使用switch statement数组键中显示每个,这是我的简单代码:

<?php
$char = array('A'=>'01', 'B'=>'02', 'C'=>'03', 'D'=>null);

foreach($char as $letter => $number) 
{
    switch($char[$letter]) 
    {
        case 'A':
            echo $number;
            break;
        case 'B':
            echo $number;
            break;
        case 'C':
            echo $number;
            break;
        case 'D':
            echo $number;
            break;
        default:
            echo 'LETTER '.$letter.' is empty';
    }
}
?>

问题:

  

它不会打印存储在数组中的值。

预期输出:

  

如果 A 存在,则返回 01 。 。 。 。 。 。 。等等。但是,如果数组键包含空值,则返回'LETTER D为空'

有什么帮助吗?谢谢

5 个答案:

答案 0 :(得分:6)

使用switch($letter)代替switch($char[$letter])。 PHP foreach循环将您的数组拆分为 $ letter =&gt; A $ number =&gt; 01

    $char = array('A'=>'01', 'B'=>'02', 'C'=>'03', 'D'=>null);

    foreach($char as $letter => $number) 
    {
        switch($letter) 
        {
            case 'A':
                echo $number;
                break;
            case 'B':
                echo $number;
                break;
            case 'C':
                echo $number;
                break;
            case 'D':
                if($number=='' || is_null($number)){ 
                  echo 'LETTER '.$letter.' is empty';
                }else{
                  echo $number;
                }
                break;
            default:
                echo 'LETTER '.$letter.' is empty';
        }
    }

OR

    $char = array('A'=>'01', 'B'=>'02', 'C'=>'03', 'D'=>null);

    foreach($char as $letter => $number) 
    {          
        CheckNumber($letter, $number);                
    }


    function CheckNumber($letter, $number){         
        if($number=='' || is_null($number)){    // add whatever condition you want to check     
            echo 'LETTER '.$letter.' is empty';             
        }else{              
            echo $number;
        }
    }

答案 1 :(得分:0)

替换

  

switch($char[$letter]) as switch($letter)

答案 2 :(得分:0)

您正在使用该数组索引中的值,而不是索引。试试这个。

switch($letter) 
    {
        case 'A':
            echo $number;
            break;
        case 'B':
            echo $number;
            break;
        case 'C':
            echo $number;
            break;
        case 'D':
            echo $number;
            break;
        default:
            echo 'LETTER '.$letter.' is empty';
    }

答案 3 :(得分:0)

试试这个:它会给出答案:LETTER D为空(默认只在没有条件时才执行,如果你想输出“字母D为空”那么你必须要字母匹配情况下的代码。这里,情况D匹配,但只有代码来回显数字,并且数组中的D没有数字分配,所以t什么都没有显示。)

$char = array('A'=>'01', 'B'=>'02', 'C'=>'03', 'D'=>null);

foreach($char as $letter => $number) 
{
    switch($letter) 
    {
        case 'A':
           if($number==null)
           {
            echo "LETTER ".$letter."is empty";
            }
           else
           {
           echo $number;
            }
            break;
        case 'B':
             if($number==null)
           {
            echo "LETTER ".$letter."is empty";
            }
           else
           {
           echo $number;
            }
            break;
        case 'C':
             if($number==null)
           {
            echo "LETTER ".$letter."is empty";
            }
           else
           {
           echo $number;
            }
            break;
        case 'D':
            if($number==null)
           {
            echo "LETTER ".$letter."is empty";
            }
           else
           {
           echo $number;
            }
            break;
        default:
            echo 'LETTER '.$letter.' is empty';
    }
}

答案 4 :(得分:0)

       /// This is what I did ... 

         $i = (isset($somevalue))? $somevalue : NULL;  /// where $somevalue could be GET or POST ..or whatever
         $x = array(NULL=>'','monkey'=>'brown','baseball'=>'round','key3'=>'value3');

         $x['brisket'] = 'good'; // if you wanted to add another value...
         $x['pickles'] = 'notSoGood'; // if you wanted to add another value...

        /// uncomment below to view your array values
         // echo '<pre>';
         // var_dump($x); 
         // echo '<pre>';

            switch($i){
                case $i: 
                echo 'my value'.$x[$p];  
                //include_once $x[$p];    
                break;

                default: 
                echo 'default value';   
                //include_once $somedefault;
          }