Создание строк PHP с использованием других переменных ... работает вручную, не могу понять, как автоматически - PullRequest
0 голосов
/ 31 декабря 2010

Я пытаюсь получить переменную, которая будет сформирована автоматически, используя данные, извлеченные из базы данных MySQL. Я знаю, что данные извлекаются из базы данных в некоторой форме, напоминающей ее исходную форму, но эти данные не действуют так же, как данные, которые вводятся вручную и присваиваются строке.

Например, если ячейка в таблице mysql говорит ...

I said "goodbye" before I left.
She also said "goodbye."

... и я вручную копирую / вставляю его и добавляю необходимые escape-символы ...

$string1 = 
"
I said \"goodbye\" before I left.
She also said \"goodbye.\"
";

... что не равно ...

$string1 = $mysqlResultArray['specificCellWithQuoteShownAbove']

Интересно, что если я выведу обе версии $ string1 и посмотрю вывод, они окажутся точно такими же. Но они не функционируют одинаково, когда проходят через различные функции, которые я создал. Функции работают только в том случае, если я использую метод копирования / вставки вручную - очевидно, это не то, что мне нужно.

Я не уверен, имеет ли это отношение к разрывам строк или выходам - ​​или к какой-то их комбинации. Но хотя обе строки внешне одинаковы, они, по-видимому, функционально различны, и я не знаю почему.

Итак, как я могу создать $ string1 без ручного копирования / вставки содержимого из записи mysql, а вместо этого запрашивать данные и присваивать их $ string1 таким образом, чтобы он был в точности функциональным эквивалентом ручной копии / вставленной строки?

Ответы [ 3 ]

2 голосов
/ 31 декабря 2010

Ваши строки не совпадают. Вы думаете, что они есть, но это не так. Ниже приведена быстрая и грязная программа, которая будет проходить через две строки и сравнивать их символ за символом, выделяя любые различия. Добавьте этот код в свой проект и замените $first_string и $second_string двумя строками, которые, по вашему мнению, совпадают, но не совпадают.

function output_chrs($i,$chr_1, $chr_2)
{
    echo $i . '.' . $chr_1, '|', $chr_2;
    if($chr_1 === $chr_2)
    {
        echo "\n";
    }
    else
    {
        echo " <---- difference detected\n";
    }
    return; 
}

function chr_by_chr($string_1, $string_2, $output_method)
{
    if(strlen($string_2) < strlen($string_1))
    {
        $string_2 = str_pad($string_2, strlen($string_1), ' ');
    }
    for($i=0;$i<strlen($string_1);$i++)
    {
        call_user_func($output_method, $i, $string_1[$i], $string_2[$i]);
    }

    if(strlen($string_2) > strlen($string_1))
    {
        for($i=$i;$i<strlen($string_2);$i++)
        {
            call_user_func($output_method, $i, $string_1[$i], $string_2[$i]);
        }
    }
    return;
}

$first_string  =  'foobazbar';
$second_string =  'fora';
$output_method = 'output_chrs';

ob_start();
$results = chr_by_chr($first_string,$second_string,$output_method); 
echo "\n";
$results = chr_by_chr($first_string,$second_string,'output_ords');  

$results = ob_get_clean();
if(isset($argv))
{
    echo $results;
}
else
{
    echo nl2br($results);
}

Этот код будет запускаться из командной строки или браузера. Как написано выше, он выводит

0.f|f
1.o|o
2.o|r <---- difference detected
3.b|a <---- difference detected
4.a|  <---- difference detected
5.z|  <---- difference detected
6.b|  <---- difference detected
7.a|  <---- difference detected
8.r|  <---- difference detected

0.102|102
1.111|111
2.111|114 <---- difference detected
3.98|97 <---- difference detected
4.97|32 <---- difference detected
5.122|32 <---- difference detected
6.98|32 <---- difference detected
7.97|32 <---- difference detected
8.114|32 <---- difference detected
0 голосов
/ 31 декабря 2010

Должно работать, не может диагностировать проблему, в любом случае попробуйте использовать strcmp и попробуйте использовать strstr(mystr, strmysql), чтобы выяснить, какая часть строки совпадает, это поможет вам решить проблему

0 голосов
/ 31 декабря 2010

Похоже, у вас есть разрывы строк в начале и конце $string1. Измените этот раздел на следующий:

$string1 = "I said \"goodbye\" before I left.
She also said \"goodbye.\"";

И ты должен быть крут.

Также попробуйте следующее:

var_dump($string1);

Это, в отличие от echo или print, будет содержать разделитель строк, так что вам будет легче увидеть различия между строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...