2017-02-15 15 views
0

У меня есть входное текстовое поле, текст, который я вход преобразуется в $array как:поиска PHP и заменить между массивом и многомерным массивом

Array 
(
    [0] => cat 
    [1] => sat 
    [2] => on 
    [3] => the 
    [4] => monkey 
    [6] => is 
    [7] => nice 
    [8] => dog 
    [9] => ate 
    [10] => fish 
) 

И я $another_array как:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [word] => cat 
      [keyword] => nice cat 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [word] => dog 
      [keyword] => good dog 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [word] => monkey 
      [keyword] => cute monkey 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [word] => fish 
      [keyword] => fresh fish 
     ) 

    [4] => Array 
     (
      [id] => 5 
      [word] => bird 
      [keyword] => love bird 
     ) 

    [5] => Array 
     (
      [id] => 6 
      [word] => rabbit 
      [keyword] => rats 
     ) 

    [6] => Array 
     (
      [id] => 7 
      [word] => animal 
      [keyword] => not animal 
     ) 

) 

Я я пытаюсь сделать это, чтобы заменить каждое слово в $array, что соответствует [word] в $another_array и заменяет каждое слово на textarea [ключевое слово] в $another_array

Я попытался использовать str_replace, но результат такой грязный.

Входной текст Я в текстовое поле

cat sat on the monkey, monkey is nice, dog ate fish 

Я хочу, чтобы результат как

nice cat sat on the cute monkey, cute monkey is nice, good dog ate fresh fish 
+0

Что значит «но результаты такие грязные»? – BizzyBob

+0

Я имею в виду, выход ужасный – dany

+0

, пожалуйста, разместите код с попыткой использования 'str_replace()', чтобы мы могли его исправить ..! – BizzyBob

ответ

1

Если у вас не было никаких параметров, попробуйте это.

$array = array 
(
    0 => 'cat', 
    1 => 'sat', 
    2 => 'on', 
    3 => 'the', 
    4 => 'monkey', 
    6 => 'is', 
    7 => 'nice', 
    8 => 'dog', 
    9 => 'ate', 
    10 => 'fish' 
); 

$anotherarray = array 
(
    0 => array('id' => 1,'word' => 'cat','keyword' => 'nice cat'), 
    1 => array('id' => 2,'word' => 'dog','keyword' => 'good dog'), 
    2 => array('id' => 3,'word' => 'monkey','keyword' => 'cute monkey'), 
    3 => array('id' => 4,'word' => 'fish','keyword' => 'fresh fish'), 
    4 => array('id' => 5,'word' => 'bird','keyword' => 'love bird'), 
    5 => array('id' => 6,'word' => 'rabbit','keyword' => 'rats'), 
    6 => array('id' => 7,'word' => 'animal','keyword' => 'not animal') 
); 

$concat = implode(' ', $array); 

echo $concat.'<br/>'; 

foreach ($array as $key1 => $item) 
{ 
    foreach ($anotherarray as $key2 => $search) 
    { 
     if(in_array($item, $search)) 
     { 
      $array[$key1] = $search['keyword']; 
     } 
    } 
} 

$concat = implode(' ', $array); 

echo $concat; 
+0

спасибо, сэр @Ganesh Radhakrishman – dany

+0

@dany добро пожаловать –

1

попробуйте этот код

$check = [ 
    ["id"=>1, "word"=>"dog", "keyword"=>"good dog"], 
    ["id"=>2, "word"=>"monkey", "keyword"=>"cute monkey"], 
    ["id"=>3, "word"=>"fish", "keyword"=>"fresh fish"] 
]; 


$input = [ 
      'dog', 
      'sat', 
      'monkey',  
      'fish'  
     ]; 


$result = array_map(function ($v) use ($value, $check) { 
       $key = array_search($v, array_column($check, 'word')); 
       if(is_numeric($key)){ 
        return $v = $check[$key]['keyword']; 
       } 

       return $v; 
      }, $input); 

print_r($result); 

echo implode(" ",$result); 

Ссылка: https://eval.in/737332

1

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

$value_map = []; 
foreach($another_array as $v) 
{ 
    $value_map[$k['word']] = $v['keyword']; 
} 
$result = array_map(function($v) use($value_map){return isset($value_map[$v]) ? $value_map[$v] : $v;}, $array); 
1

Попробуйте этот код,

foreach ($array as $k => $v) { 
    if($a = array_search($v, array_column($another_array, 'word'))){ 
     $array[$k] = $another_array[$a]['keyword']; 
    } 
} 
$str = implode(' ', $array); 

Дайте ему попробовать, это будет работать.