【问题标题】:My string has turned into an array of letters我的字符串变成了一个字母数组
【发布时间】:2019-11-17 23:54:31
【问题描述】:

我已从数据库中提取数据。但是当我从数组中回显一个特定值时,字符串显示为一个数组,每个字母都用自己的索引分隔!

我尝试过 implode,但收到一个错误,即我传递的参数不正确,并且 explode 不会改变任何事情。

 $stmt = $conn->prepare("SELECT * FROM cours WHERE date = :date AND time = :time AND cours = :cours AND present ='non'");
 $stmt->execute([':date' => $date, ':cours' => $cours, ':time' => $time]);

 if ($stmt->rowCount() > 0) {
    $output = $stmt->fetchAll();

        $classe = $output[0]['classe'];
        // explode(",",$classe);
        // implode(",",$classe);
        echo json_encode($classe);

 } else {
    $errors = "No data found for this date";
    echo json_encode($errors);
 }

控制台中的结果是

[object Array]: ["W", "i", "n", "t", "e", "r", " ", "2", "0", "1", "9"]
0: "W"
1: "i"
2: "n"
3: "t"
4: "e"
5: "r"
6: " "
7: "2"
8: "0"
9: "1"
10: "9"
length: "11"

您可以在上面的控制台日志中看到我得到的结果。我需要的是把它作为一个值,以字符串格式。

【问题讨论】:

  • 我无法重现。如果我拿数组做echo implode($array);,我得到Winter 2019。我是不是误会了什么?

标签: php mysql arrays json string


【解决方案1】:

您可以直接在查询中执行此操作(使用 GROUP_CONCAT()),但如果您想要 PHP 解决方案,只需在编码之前使用不带分隔符的 implode()

虽然fetchAll() 在您只使用第一行时似乎毫无意义?您可以先执行$output = $stmt->fetch();,然后再执行$classe = $output['classe'];(如果您将查询更改为仅返回classe 列,甚至可以使用fetchColumn())。

if ($output = $stmt->fetchAll()) {
    $classe = $output[0]['classe'];
    // explode(",",$classe);
    $classe = implode("", $classe);
    echo json_encode($classe);
} else {
    $errors = "No data found for this date";
    echo json_encode($errors);
}

通过使用GROUP_CONCAT(),您可以在查询中完成所有操作,

$stmt = $conn->prepare("SELECT GROUP_CONCAT(classe SEPARATOR '') as allClasse FROM cours WHERE date = :date AND time = :time AND cours = :cours AND present ='non'");
$stmt->execute([':date' => $date, ':cours' => $cours, ':time' => $time]);

if ($row = $stmt->fetch()) {
    echo json_encode($row['allClasse']);
} else {
    $errors = "No data found for this date";
    echo json_encode($errors);
}

【讨论】:

  • 就像一点不一样:如果你不需要一个特殊的glue 用于内爆,你可以做implode($classe);
  • 确实可以!虽然我个人的偏好是明确说明 - 但你是绝对正确的,你可以这样做$classe = implode($classe)!它记录在该函数手册的签名中:php.net/implode
  • 会有更多行,我将使用 for 循环。但现在我只是想设置我想从每个数组中提取的变量,我遇到了我的问题。
  • 那不会是一个数组,所以你必须在做其他事情。 $output[0]['classe'] 是第一行的确切列 classe,不能是数组 - 它必须是字符串。
  • echo json_encode($string) 不会使其成为数组。删除内爆,直接打印它 - 编码它只是被引用。 json_encode() 用于将数组转换为 JSON 对象,如果您使用 echo json_encode($output);,这将很有用
猜你喜欢
  • 2017-12-09
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多