2017-02-15 72 views
0

我输入textarea的,我输入转换为$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中的每个单词替换为与$another_array中的[word]匹配的每个单词,并替换基于textarea的每个单词[关键字] $another_array

我试过用str_replace,但结果太乱了。

在textarea的文字我输入

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); 

试试看吧,这会工作。