2014-12-23 1 views
0

ОРИГИНАЛ КОДMySQL Query в массив для preg_replace

$sentance="are you hungry too?"; 
 
function newLanguage($text) { 
 
\t $sql = "SELECT in,out FROM words"; 
 
\t $res = mysql_query($sql) or die(); 
 
\t $in_array = array(); 
 
\t $out_array = array(); 
 
\t while ($row = mysql_fetch_array($res)){ 
 
\t \t $in_array[] = $row['in']; // table in, NEW words 
 
\t \t $out_array[] = $row['out']; //table out, ENG words 
 
\t } 
 
\t return preg_replace($in_array,$out_array,$text); 
 
} 
 
$newwords = newLanguage($sentance); 
 
echo $newwords;

ИЗМЕНЕННАЯ КОД:

ini_set("display_errors", "1"); 
 
error_reporting(E_ALL); 
 

 
function newLanguage($text) { 
 

 
$sql = "SELECT in,out FROM words"; 
 
$res = mysql_query($sql) or die(); 
 
$in_array = array(); 
 
$out_array = array(); 
 
while ($row = mysql_fetch_array($res)){ 
 
\t $in_array[] = '/\b' . preg_quote($row['in']) . '\b/'; // table in, NEW words 
 
\t $out_array[] = $row['out']; //table out, ENG words 
 
} 
 

 
/* VERSION 2 - STATIC, FOR DEBUGGING 
 
$in_array = array('~\you~s','~\to~s','~\too~s'); 
 
$out_array = array('noa','nie','niee');*/ 
 

 
return preg_replace($in_array,$out_array,$text); 
 
} 
 
$sentance="are you hungry too?"; 
 
$newwords = newLanguage($sentance); 
 

 
var_dump($in_array); 
 
echo $sentance;

ТОК КОД

ini_set("display_errors", "1"); 
 
error_reporting(E_ALL); 
 

 
$sentance="are you hungry too?"; 
 
function newLanguage($text) { 
 

 
$sql = "SELECT * FROM words"; 
 
$res = mysql_query($sql) or die(); \t \t 
 
while ($row = mysql_fetch_array($res)){ 
 
    $in_array[] = '/\b' . preg_quote($row['in']) . '\b/'; // table in, NEW words 
 
    $out_array[] = $row['out']; //table out, ENG words 
 
} 
 
return preg_replace($in_array,$out_array,$text); 
 
} 
 
$newwords = newLanguage($sentance); 
 
var_dump($in_array); 
 
echo $newwords;

У меня возникли проблемы с моим кодом, для жизни меня я не могу заставить его работать, я работал с preg_replace, прежде чем в использовании фильтр слов. Хотя создание динамического массива с использованием результатов запроса полностью отбрасывает меня. Я просмотрел несколько руководств, но никто не помог мне понять, где я ошибаюсь.

Любая помощь будет признателен :)

ЦЕЛЬ: Создание нового языка перевода. База данных содержит строку с 'in' & 'out', которая является и новым языком, и местным языком.

ПРОБЛЕМА: Я уверен, если мои Массивы успешно заселены, так как мой preg_replace не работает.

---- UPDATE ----

Вот что моя база данных выглядит;

id   in   out 
 
1   you   noa 
 
2   to   nie 
 
3   too   niee

  • Они хранятся в виде VARCHARS
+0

Ваши 'в' ценности действительно регулярные выражения, или просто строки? – Barmar

+0

Можете ли вы разместить образцы значений из таблицы 'words'? Убедитесь, что включена функция error_reporting (E_ALL)? Вероятно, вы получаете ошибки из 'preg_replace', потому что в regexp нет соответствующих разделителей. – Barmar

+0

Как включить error_reporting? Я этого раньше не встречал. Я просто вставляю; ini_set ("display_errors", "1"); error_reporting (E_ALL); над моим запросом? – user3670338

ответ

1

Попробуйте это:

while ($row = mysql_fetch_array($res)){ 
    $in_array[] = '/\b' . preg_quote($row['in']) . '\b/'; // table in, NEW words 
    $out_array[] = $row['out']; //table out, ENG words 
} 

Это превращает in worods в регулярные выражения, добавив \b для соответствия границам слов.

Мой весь тестовый код:

<?php 
$sentance="are you hungry too?"; 
function newLanguage($text) { 
    $in_array = array(); 
    $out_array = array(); 
    $rows = array(array('in' => 'you', 'out' => 'noa'), 
        array('in' => 'to', 'out' => 'nie'), 
        array('in' => 'too', 'out' => 'niee')); 
    foreach ($rows as $row) { 
     $in_array[] = '/\b' . preg_quote($row['in']) . '\b/'; // table in, NEW words 
     $out_array[] = $row['out']; //table out, ENG words 
    } 
    return preg_replace($in_array,$out_array,$text); 
} 
$newwords = newLanguage($sentance); 
echo $newwords; 

$rows массив заменяет запрос к базе данных, но в остальном, по существу, то же самое.

+0

Обновлено, все еще не работает. Я чувствую себя очень глупо сейчас :(и demotivated. Извините за то, что потратил время, и я ценю, что вы нашли время, чтобы помочь. – user3670338

+0

Пожалуйста, добавьте 'var_dump ($ in_array)' на ваш вопрос. – Barmar

+0

Обновлено. ( – user3670338

0

BIG спасибо Бармару за его особую помощь и терпение, помогая мне решить мой вопрос! Я сделал правильный ответ, так как он мне очень помог, но если вы хотите использовать мой последний код, который прокомментирован, пожалуйста, не стесняйтесь.

Моя цель состояла в том, чтобы импортировать строки базы данных IMPORT и вставить их в массив, который будет использоваться с preg_replace.

Мой Окончательный код был:

//this is the base text that will be modified using database information 
 
$sentance="are you hungry too?"; 
 

 
function newLanguage($text) { 
 
    $sql = "SELECT * FROM words"; 
 
    $res = mysql_query($sql) or die(); \t 
 
    $in_array = array(); 
 
    $out_array = array(); 
 
    while ($row = mysql_fetch_array($res)){ 
 
     // inserts the column row 'in' into an array called in_array 
 
     $in_array[] = '/\b' . preg_quote($row['in']) . '\b/'; 
 
     // inserts the column row 'out' into an array called out_array 
 
     $out_array[] = $row['out']; 
 
\t } 
 
    //replaced any matching words from 'sentance' with 'in_array' and replaces with 'out_array' 
 
    return preg_replace($in_array,$out_array,$text); 
 
} 
 

 
//this makes a new variable and used a function to replace the text with matches in the variable 
 
$newwords = newLanguage($sentance); 
 
echo $newwords;

+0

Вам все еще не хватает инициализации массивов. – Barmar

+0

Это работает, и у меня нет ошибок. Я добавляю инициализации, и у меня есть ошибки. Спасибо за вашу помощь, хотя :) Я действительно ценю это! – user3670338

+0

Это не имеет никакого смысла. Вы получили уведомление о неинициализированной переменной раньше, потому что вам не хватало инициализации. – Barmar

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