Php 如何根据数组的长度循环数组

Php 如何根据数组的长度循环数组,php,mysql,eloquent,Php,Mysql,Eloquent,我的输入是“[Company_A,Company_B,Company_C]”,这是一个字符串,我已经在使用它了 $array = explode(',', (trim($filters->input('provider'), '[]'))); 转换它 我的过滤器 public $array; public $i, $j; public static function apply(Request $filters, $size, $bonus) { if ($filters->ha

我的输入是
“[Company_A,Company_B,Company_C]”
,这是一个字符串,我已经在使用它了

$array = explode(',', (trim($filters->input('provider'), '[]')));
转换它

我的过滤器

public $array;
public $i, $j;

public static function apply(Request $filters, $size, $bonus)
{
if ($filters->has('provider') && trim($filters->input('provider')) != "") {
        $bonus->whereHas('bonusCompany', function ($query) use ($filters) {
            $array = explode(',', (trim($filters->input('provider'), '[]')));
            $j = count($array);
            echo count($array);
            for ($i = 0; $i < $j; $i++) {
                $query->where('providers', 'like', ['%' . $array[$i] . '%']);
                echo $array[$i];
                echo $filters->input('provider');
            }
        });
正确的查询应该是

select * from `bonus_Company` where `bonuses`.`id` = `bonus_Company`.`fk_bonus_id` and (`providers` like ? or `providers` like ?)

调试失败的SQL查询的最佳方法是查看查询日志:

你可以用两种方法

(一)

$string=“公司A,公司B”//要搜索的公司名称字符串
$array=explode(“,”,$string)//将字符串转换为数组
$i=1;
$qry=“从‘公司’中选择*”;
foreach($companyName形式的数组){

如果($i),你可以用两种方法。你可以在数据库查询的
子句中使用相同的字符串,而不是用逗号分解。或者你可以使用
foreach
而不是
for($i=0;$i<$j;$i++){
@NaveedRamzan sry,不理解和问题更新我已经添加了答案“我的提供者字段是json格式的,所以我使用like和%来匹配它。”-非常糟糕。要么使用DBMS提供的json功能,要么以不同的格式/结构存储数据。使用like在json中四处搜索并不比存储好(坏)的数据好旧的经典逗号分隔数据到单个字段。@overflowstack它与您的代码相同,但带有foreach。如果实现正确,它确实有效。@overflowstack您可以标记这个正确的答案,如果它解决了您的查询。@NaveedRamzan不,我无法使用这些代码在第行
echo$a
看到一些输出或值吗?是的,您的代码与我的代码相同,数组存储了输入,但无法获得结果。我知道
c
指的是什么?以及
$companys
$connection
在哪里?c是表别名,用于指定临时名称。有关详细信息=>和$companys来自数据库,所以我不需要for循环来实现这一点?当然,如果您想要所有匹配的公司名称,那么它需要循环。您想要匹配的提供者名称(companys name)吗?虽然你可能是对的,但这很难回答op的问题。。。
select * from `bonus_Company` where `bonuses`.`id` = `bonus_Company`.`fk_bonus_id` and (`providers` like ? or `providers` like ?)
DB::connection()->enableQueryLog()

// code you want to debug

$queries = DB::getQueryLog();
print_r($queries);
$array = explode(',', (trim($filters->input('provider'), '[]')));
foreach ($array as $a) {
    $query->where('providers', 'like', ['%' . $a . '%']);
    echo $a;
    echo $filters->input('provider');
}
$string = "company_A, company_B"; //string of company names you want to search
$array = explode( ",", $string); //convert string to array
$i = 1;    
$qry = "SELECT * from `company` ";
foreach($array as $companyName) {            
        if($i <= 1){
            $qry .= " WHERE `providers` LIKE '%".trim($companyName)."%' ";
        } else {
            $qry .= " OR `providers` LIKE '%".trim($companyName)."%' ";
        }            
        $i += 1;            
}    
$result = mysqli_query($connection, $qry); 
$companies = mysqli_fetch_assoc($result);     
foreach ($companies as $companyName){
    echo $companyName;
}