这怎么可能是一个字符串而不是一个数组?

时间:2014-01-08 13:42:19

标签: php arrays string

[我已经编辑了整篇文章,以便打印整个脚本。我发布了一个类似的较短版本,因为我认为因为西班牙语会更容易...但当然......它不会......]

我有这样的表格:

<b>3. Selecciona una opción</b><br>
<input type ="checkbox" name="servicios[]" value="uno">Un sólo servicio<br>
<input type ="checkbox" name="servicios[]" value="dos">Dos servicios<br>
<input type ="checkbox" name="servicios[]" value="tres">Tres o más<br>

要获得用户所选择的内容:

$servicios = $_POST['servicios'];
   if(isset($servicios)){
      foreach ($servicios as $servicio) {
         echo $x."<br>";
         }
   }

现在,我有一个数据库,并且有一个开关,我得到的数据库等同于用户选择的元素:

$consulta=mysqli_query($conexion,$query)
if($_SERVER['REQUEST_METHOD']=='POST') {
   while($datosdelabase=mysqli_fetch_assoc($consulta)){
      if(isset($servicios)){
         foreach ($servicios as $servicio) {
         switch ($servicio) {
            case 'uno':
               $servicios=$datosdelabase['uno'];
               break;
            case 'dos':
               $servicios=$datosdelabase['dos'];
               break;
            case 'tres':
               $servicios=$datosdelabase['tres'];
               break;
            }             
            echo "Servicios:".$servicio.": ".$servicios."<br>";
         }
}
...

在数据库内部,我的每列都有整数值。

如果用户选择ie那样。 UNO。我使用$ servicio获得“Unsóloservicio”,使用$ servicios获得1(因为这是我从数据库获得的。

现在当我尝试获取类型时,我得到一个字符串而不是数组?那是为什么?

echo gettype($servicios); // string

var_dump($servicios); // returns: string(2) "Two"

2 个答案:

答案 0 :(得分:3)

因为你在这里设置$ servicios:

$servicios=$datosdelabase['uno'];

或:

$servicios=$datosdelabase['dos'];

等...

编辑以删除错误的陈述:

您正在echo gettype($servicios);中设置case,这是数据库中的单个字符串

编辑:这是要更改的代码:

foreach ($servicios as $servicio) {
     switch ($servicio) {
        case 'uno':
           $servicios=$datosdelabase['uno']; <--- CHANGE THIS to $servicios_2=$datosdelabase['uno'];
           break;
        case 'dos':
           $servicios=$datosdelabase['dos']; <--- CHANGE THIS to $servicios_2=$datosdelabase['dos'];
           break;
        case 'tres':
           $servicios=$datosdelabase['tres']; <--- CHANGE THIS to $servicios_2=$datosdelabase['tres'];
           break;
        }             
        echo "Servicios:".$servicio.": ".$servicios."<br>";
     }

答案 1 :(得分:1)

因为这样的行会覆盖$ servicios的值

switch ($servicio) {
   case 'uno':
      $servicios=$datosdelabase['uno'];
      ...
      $servicios=$datosdelabase['dos'];
      ....
      $servicios=$datosdelabase['tres'];

你应该做的是使用另一个变量来获取$ datosdelabase中的值。你不应该使用$ servicios,因为那是你正在遍历的数组。

你可以试试这个。

$consulta=mysqli_query($conexion,$query)
if($_SERVER['REQUEST_METHOD']=='POST') {
   while($datosdelabase=mysqli_fetch_assoc($consulta)){
      if(isset($servicios)){
         foreach ($servicios as $servicio) {
         switch ($servicio) {
            case 'uno':
               $serviciosVal=$datosdelabase['uno'];
               break;
            case 'dos':
               $serviciosVal=$datosdelabase['dos'];
               break;
            case 'tres':
               $serviciosVal=$datosdelabase['tres'];
               break;
            }             
            echo "Servicios:".$servicio.": ".$serviciosVal."<br>";
         }
}
...

我刚刚在案例中使用了$ serviciosVal而不是$ servicios。