2015-10-23 4 views
1

У меня есть значения из текстового файла и из базы данных MySql Я хотел бы сравнить:Как я могу создать массив из переменной?

Вот значения я получаю из текстового файла:

foreach($list as $row) { 
     echo $row['cat']."<br>"; 
} 

Мой результат:

A2345 
B7890 

Вот значение из моей базы данных:

$sql = "SELECT cat FROM animals WHERE id = '$id'";     
$q = $pdo->prepare($sql); 
$q->execute(); 

foreach ($pdo->query($sql) as $row) { 
    echo $row['cat']."<br>"; 
} 

результат:

A2345 
B7890 

До сих пор все выглядит хорошо.


Теперь мои проблемы:

Для сравнения содержимого базы данных и содержимое текстового файла, я хотел бы сохранить эти два результата, каждый в массиве и сравнить их.

Так что моя цель состоит в том, чтобы для обоих источников следующему результату:

array(2) { 
    ["cat"]=> 
    string(5) "A2345" 
    ["cat"]=> 
    string(5) "B7890" 
} 

Таким образом, в конце концов, я мог бы написать:

If (array1 == array2) { echo "The content of database and textfile match" } 

И тут приходит моя проблема. Я не знаю, как это сделать. Потому что, если я пишу ...

echo "<pre>"; 
var_dump ($list); 
echo "</pre>"; 

... Я получу этот результат:

array(2) { 
    [0]=> 
    array(2) { 
    ["cat"]=> 
    string(5) "A2345" 
    ["name"]=> 
    string(3) "tom" 
    } 
    [1]=> 
    array(2) { 
    ["cat"]=> 
    string(5) "B7890" 
    ["name"]=> 
    string(3) "sam" 
    } 
} 

И если я пишу это ...

echo "<pre>"; 
    var_dump ($list["cat"]); 
    echo "</pre>"; 

... Я буду получить:

NULL 

А также с получением результата в базе данных для массива - огромная проблема для меня.

я писал:

foreach ($pdo->query($test) as $row) { 
    $data[] = $row; 
    echo "<pre>"; 
    var_dump($data); 
    echo "</pre>"; 
} 

Но мой результат:

array(1) { 
     [0]=> 
     array(2) { 
     ["cat"]=> 
     string(32) "A2345" 
     [0]=> 
     string(32) "A2345" 
     } 
    } 
    array(2) { 
     [0]=> 
     array(2) { 
     ["cat"]=> 
     string(32) "A2345" 
     [0]=> 
     string(32) "A2345" 
     } 
     [1]=> 
     array(2) { 
     ["cat"]=> 
     string(32) "B7890" 
     [0]=> 
     string(32) "B7890" 
     } 
    } 

Я сожалею, что я так растерялся, что делать, но я благодарен за любой намек.

+0

Вам не нужно всасывать весь db на php, чтобы сравнить его с файлом. все, что вам нужно, это выяснить, сколько значений в вашем файле, и проверить, все ли они в db. например 3 значения, '' select count (*) from ... где значения в (val1, val2, val3) ', если счет возвращается как' 3', вы знаете, что они все там. –

+0

@Marc: Мне нужно сравнить строки. Итак, если в текстовом файле есть ошибка с «A2345», например, «A234?» то мне нужно сообщение об ошибке – Jarla

+0

Обратите внимание, что то, к чему вы стремитесь (структура массива), будет невозможным, так как вы будете заменять значения клавиш. Когда вы установите '[" cat "] => « A2345 »', если вы попытаетесь установить '[" cat "] =>" B7890 "', оно заменит первое значение ('A2345') на' B7890'. Что касается результата запроса, так как кажется, что вы используете PDO, с [fetch_assoc] (http://php.net/manual/en/pdostatement.fetch.php) вы можете получить результат без индекса 'column'. – FirstOne

ответ

1

Я нашел решение, которое я могу работать с:

для текстового файла:

$cat = array(); 
     foreach($list as $row) { 
       $cat[] = $row['cat']; 
     } 
var_dump($cat); 

и для базы данных:

$cat = array(); 
    foreach ($pdo->query($sql) as $row) { 
     $cat[] = $row['cat']; 
    } 

var_dump($cat); 

Так как я получаю результат:

array(2) { 
[0]=> string(5) "A2345" 
[1]=> string(5) "B7890" 
} 

Сейчас у меня есть два массива, которые я могу сравнить!

+0

Я был бы осторожен с приведенным выше кодом. По внешнему виду вы используете '$ cat' для обоих массивов. Вы можете перезаписать переменную, если этот код используется последовательно! –

Смежные вопросы