PHP Implode Value - PullRequest
       35

PHP Implode Value

0 голосов
/ 13 февраля 2019

Как я могу получить одно значение из массива ниже?Текущий результат для 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.'/';
?>

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Поскольку значение $lastrow является массивом, который является правильным, и вы сказали, что он получает значение дважды, вы можете попробовать это, объявить $id = array() и попытаться присвоить значение $id = array_shift($lastrow) другой переменной, которая будетобработайте значение как $implodedArray = implode($id) и установите его как $database = 'E:/database/users/'.$implodedArray .'/';, это должно быть значение 19.Это идея манипулировать вашим массивом.

0 голосов
/ 13 февраля 2019

SQLite3Result::fetchArray по умолчанию использует режим SQLITE3_BOTH, который возвращает 0-индексированный и ассоциативный массив выбранных столбцов.

Это означает, что вы получите значение, например:

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

Чтобы решить проблему, вам просто нужно изменить fetchArray, чтобы получить единственное значение, используя SQLITE3_NUM или SQLITE3_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 

Позволяет вам получать последний идентификатор без итерации по всей таблице пользователей.

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