PHP 内爆价值

PHP Implode Value

如何从下面的数组中获取单个值?第 19 行的当前结果就像 19 重复了两次一样;

E:/database/users/1919/

我只需要 19,所以 URL 看起来像;

E:/database/users/19/

<?php
$db = new SQLite3('C:/inetpub/wwwroot/database.db');
$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray())
{
$id = implode($lastrow);
}
$database = 'E:/database/users/'.$id.'/';
?>

SQLite3Result::fetchArray 默认使用 SQLITE3_BOTH 模式,其中 returns 一个由 0 索引和所选列组成的关联数组。

意味着您将收到如下值:

$lastrow = array(
   0 => '19',
   'id' => '19'
);

要解决此问题,您只需更改 fetchArray 以使用 SQLITE3_NUMSQLITE3_ASSOC.

检索单个值
$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray(SQLITE3_NUM)) {
    $id = implode($lastrow);
    //list($id) = $lastrow; //alternative to implode
}
$database = 'E:/database/users/'.$id.'/';

或者您只需要指定要检索的列名,而不是使用 implode.

$row = $db->query('select id from users');
while ($lastrow = $row->fetchArray()) {
    $id = $lastrow['id'];
}
$database = 'E:/database/users/'.$id.'/';

由于您似乎只需要最后一行,我建议您更改查询以提高整体性能。

SELECT MAX(id) FROM users 

SELECT id FROM users ORDER BY id DESC LIMIT 1 

允许您检索最后一个 ID 而无需遍历整个用户 table。

if ($row = $db->query('SELECT MAX(id) FROM users')) {
    if ($row->numColumns()) {
        list($id) = $row->fetchArray(SQLITE3_NUM);
        $database = 'E:/database/users/'.$id.'/';
    }
}

因为$lastrow的值是正确的数组,而且你说它取了两次值,你可以试试这个,声明$id = array()并尝试重新赋值给$id = array_shift($lastrow) 然后另一个变量将处理像 $implodedArray = implode($id) 这样的值并设置为你喜欢的 $database = 'E:/database/users/'.$implodedArray .'/'; 这应该得到值 19。这是一个操纵你的数组的想法。