Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取项目数组的最佳方法,如果它们匹配,则设置一个变量_Php_Arrays_Laravel - Fatal编程技术网

Php 获取项目数组的最佳方法,如果它们匹配,则设置一个变量

Php 获取项目数组的最佳方法,如果它们匹配,则设置一个变量,php,arrays,laravel,Php,Arrays,Laravel,我正在打一个db电话,获取所有服务以获得订单。如果有与订单关联的特定服务,我需要设置一个变量。这就是我目前的做法,它不会起作用,因为一旦我设置了一个变量,下一个项目就会出现并挤压它。它将覆盖之前服务项的正确值 $services = OrderService::where('order_id','=',$payload['orderId'])->get(['service_id']); foreach($services as $service){ //Screen if(

我正在打一个db电话,获取所有服务以获得订单。如果有与订单关联的特定服务,我需要设置一个变量。这就是我目前的做法,它不会起作用,因为一旦我设置了一个变量,下一个项目就会出现并挤压它。它将覆盖之前服务项的正确值

$services = OrderService::where('order_id','=',$payload['orderId'])->get(['service_id']);
foreach($services as $service){
    //Screen
    if($service->service_id == 4){ $responseArray['lnpScreen'] = '1';}
    else{ $responseArray['lnpScreen'] = '0'; }
    //Screen 2
    if($service->service_id == 5){ $responseArray['tfpScreen'] = '1';}
    else{ $responseArray['tfpScreen'] = '0'; }
    //Screen 3
    if($service->service_id == 6){ $responseArray['didScreen'] = '1';}
    else{ $responseArray['didScreen'] = '0'; }
}

您正在覆盖,因为每次循环时都使用相同的
$responseArray
。您需要使用多维数组来跟踪每个服务。类似的事情可能会让你开始:

$services = OrderService::where('order_id','=',$payload['orderId'])->get(['service_id']);
$count = 0;
foreach($services as $service){
    //Screen
    if($service->service_id == 4){ $responseArray[$count]['lnpScreen'] = '1';}
    else{ $responseArray[$count]['lnpScreen'] = '0'; }
    //Screen 2
    if($service->service_id == 5){ $responseArray[$count]['tfpScreen'] = '1';}
    else{ $responseArray[$count]['tfpScreen'] = '0'; }
    //Screen 3
    if($service->service_id == 6){ $responseArray[$count]['didScreen'] = '1';}
    else{ $responseArray[$count]['didScreen'] = '0'; }
    $count++;
}

您正在覆盖,因为每次循环时都使用相同的
$responseArray
。您需要使用多维数组来跟踪每个服务。类似的事情可能会让你开始:

$services = OrderService::where('order_id','=',$payload['orderId'])->get(['service_id']);
$count = 0;
foreach($services as $service){
    //Screen
    if($service->service_id == 4){ $responseArray[$count]['lnpScreen'] = '1';}
    else{ $responseArray[$count]['lnpScreen'] = '0'; }
    //Screen 2
    if($service->service_id == 5){ $responseArray[$count]['tfpScreen'] = '1';}
    else{ $responseArray[$count]['tfpScreen'] = '0'; }
    //Screen 3
    if($service->service_id == 6){ $responseArray[$count]['didScreen'] = '1';}
    else{ $responseArray[$count]['didScreen'] = '0'; }
    $count++;
}
在这方面应该是可行的:

$responseArray['lnpScreen'] = '0';
$responseArray['tfpScreen'] = '0';
$responseArray['didScreen'] = '0';
foreach($services as $service){
    //Screen
    if($service->service_id == 4){ $responseArray['lnpScreen'] = '1';}
    //Screen 2
    if($service->service_id == 5){ $responseArray['tfpScreen'] = '1';}
    //Screen 3
    if($service->service_id == 6){ $responseArray['didScreen'] = '1';}
}
现在他们不再互相覆盖了

或者正如powtac提到的:

$responseArray['lnpScreen'] = '0';
$responseArray['tfpScreen'] = '0';
$responseArray['didScreen'] = '0';
foreach($services as $service){
    switch($service->service_id){
        case 4://Screen
          $responseArray['lnpScreen'] = '1';
          break;
        case 5://Screen 2
          $responseArray['tfpScreen'] = '1';
          break;
        case 6://Screen 3
          $responseArray['didScreen'] = '1';
          break;
    }
}
在这方面应该是可行的:

$responseArray['lnpScreen'] = '0';
$responseArray['tfpScreen'] = '0';
$responseArray['didScreen'] = '0';
foreach($services as $service){
    //Screen
    if($service->service_id == 4){ $responseArray['lnpScreen'] = '1';}
    //Screen 2
    if($service->service_id == 5){ $responseArray['tfpScreen'] = '1';}
    //Screen 3
    if($service->service_id == 6){ $responseArray['didScreen'] = '1';}
}
现在他们不再互相覆盖了

或者正如powtac提到的:

$responseArray['lnpScreen'] = '0';
$responseArray['tfpScreen'] = '0';
$responseArray['didScreen'] = '0';
foreach($services as $service){
    switch($service->service_id){
        case 4://Screen
          $responseArray['lnpScreen'] = '1';
          break;
        case 5://Screen 2
          $responseArray['tfpScreen'] = '1';
          break;
        case 6://Screen 3
          $responseArray['didScreen'] = '1';
          break;
    }
}

我强烈建议使用
switch
语句而不是
if/else
@powtac如果我使用switch语句,将它们设置为0的最佳方法是什么?在设置之前将其设置为默认值?@ipengineer查看我的答案,了解如何在计算机中使用
开关example@ipengineer如果这解决了您的问题,请接受回答我强烈建议使用
switch
语句而不是
if/else
@powtac如果我使用switch语句将它们设置为0?在设置之前将其设置为默认值?@ipengineer查看我的答案,了解如何在计算机中使用
开关example@ipengineer如果这解决了您的问题,请接受答案,他们仍将覆盖。在foreach的第三个循环中,第二个服务将被覆盖。他需要一个多维数组。什么?服务将如何编写一个0?@Steve 0设置在foreach之前。在foreach中,唯一可以做的就是设置1。如何覆盖它们?在OP问题中,由于else部分,foreach在每个服务的responsearray中输入了0!这不是写一个“0”。。。它是关于在多个服务上循环(比如说5个服务)。在第一个循环中,您可以设置
$responseArray['lnpScreen']='1',但是如果第二个服务中的
$service->service\u id
不是4呢?@Steve so?那就不是了,而且什么也没发生!我仍然看不到你的问题,他们仍然会覆盖。在foreach的第三个循环中,第二个服务将被覆盖。他需要一个多维数组。什么?服务将如何编写一个0?@Steve 0设置在foreach之前。在foreach中,唯一可以做的就是设置1。如何覆盖它们?在OP问题中,由于else部分,foreach在每个服务的responsearray中输入了0!这不是写一个“0”。。。它是关于在多个服务上循环(比如说5个服务)。在第一个循环中,您可以设置
$responseArray['lnpScreen']='1',但是如果第二个服务中的
$service->service\u id
不是4呢?@Steve so?那就不是了,而且什么也没发生!我还是不明白你的问题