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;
}