我正在尝试拉一个数组用于另一个查询,但它不起作用,因为最后一个逗号。
<?php
include"connection.php";
$pos = mysqli_query($not,"SELECT * FROM equipos");
$logos = array();
while($row= mysqli_fetch_assoc($pos)){
$logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
}
$logos = implode(",", $logos);
$enjuego = mysqli_query($not,"SELECT * FROM partidos WHERE dprt='ftbls'");
while($part=mysqli_fetch_array($enjuego)){
$liga=$part['serie'];
$eq1= $part['eq1'];
$eq1s= strtoupper($eq1);
$eq2= $part['eq2'];
$eq2s= strtoupper($eq2);
echo $logos[$eq1].'<br>';
}
?>
它一遍又一遍给我同样的错误。 这是我最接近的但是没有用。 有人能告诉我我做错了什么吗?
我得到的错误是:警告:第22行中的非法字符串偏移'gua'
答案 0 :(得分:2)
您的代码有几个问题:
$logos
substr_replace()
的使用表明存在更深层次的问题。这是一个更好的方法:
构建数组。
$logos = array();
while($row= mysqli_fetch_assoc($pos)){
$logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
}
有很多方法可以将数组压缩成字符串。我建议您浏览PHP Array Functions上的手册。在您的情况下,您对implode()
$logos = implode(",", $logos);
注意: $logos
气味的值。您应该构造数组来保存数据,而不是格式化。
例如:
$logos[$row['abrv']] = $row['logo'];
输出:
print_r($logos);
答案 1 :(得分:1)
你想要的东西可以通过多种方式实现,但让我们来看看你的代码,那里有很多不妥之处。
语义无意义的变量名称,如pos
,not
,equipos
,abrv
。只有logo
和result
是好的变量名称。
在数据库查询中使用*
选择器。不要那样做,而是选择你需要的确切字段,它更好的性能,可维护性,代码可读性,可测试性......还需要我说更多吗?
每行获取并在每行上运行代码,而实际需要的是包含所有行的数组。解决方案:
$result = mysqli_query($not, "SELECT * FROM equipos");
$logos = mysqli_fetch_all($result, MYSQLI_ASSOC);
使用字符串连接子数组,这不是它的工作方式,你可以做什么:
while($row = mysqli_fetch_assoc($result))
{
$logos[][$row['abrv']] = $row['logo'];
}
但正如我所说,这不是必要的。
每次循环迭代时覆盖变量$logos
。您需要执行$logos[] = ...
。
答案 2 :(得分:0)
通常,implode
对此类情况很有用。
在不知道您想要做什么的情况下,请将此作为第一个提示:
$logos = array();
while($row= mysqli_fetch_assoc($pos)){
$logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
}
$logos = implode(",", $logos);
答案 3 :(得分:0)
我想到的最简单的方法就是更改查询并将数组提取到 -
<?php
include_once("connection.php");
$result = mysqli_query($not,"SELECT abrv, logo FROM equipos");
$rows = mysqli_fetch_array($result, MYSQLI_ASSOC);
// display the result
echo "<pre>"
print_r($rows);
echo "</pre>"
?>