2016-06-09 111 views
-1

所以最近我被困在某种阵列组合中并取代了情况。PHP阵列替换问题

我有此数组:

array(5) { 
    ["De"]=> 
    string(7) "treatee" 
    ["Para"]=> 
    string(13) "Cristina Isabel Gnap" 
    ["Principio"]=> 
    string(36) "Agilidade, como dinâmica de ação." 
    ["Descricao"]=> 
    string(8) "sadsadsa" 
} 

我想从['Para']场去除中间的名字,所以我做了一个for循环是这样的:

for ($i = 0; $i < count($rows); $i++) { 
     $array = explode(' ', $rows[$i]['Para']); 
     $firstName = $array[0]; 
     $lastName = $array[count($array) - 1]; 
     $combineNames= $primeiroNome." ".$ultimoNome; 
     $namesCombined= str_split($combineNomes, 30); 
     $result = array_replace($rows[$i], $nomesArray); 
} 

当然的结果,显示此:

array(5) { 
["De"]=> 
string(7) "treatee" 
["Para"]=> 
string(20) "Cristina Isabel Gnap" 
["Principio"]=> 
string(36) "Agilidade, como dinâmica de ação." 
["Descricao"]=> 
string(8) "sadsadsa" 
["0"]=> 
string(13) "Cristina Gnap" 
} 

但我其实需要做的,就是用新的["0"]领域,以取代["Para"]领域,但似乎当我把在for$result = array_replace($rows[$i]['Para'], $nomesArray);它返回:

Warning: array_replace(): Argument #1 is not an array

谁能帮助我? = D

回答

0

可以使用使preg_split和foreach循环的组合来实现,如下所示。顺便说一句,你可以测试结果here:

<?php 
     $arr = [ 
     "De"  =>"treatee", 
     "Para"  => "Cristina Isabel Gnap", 
     "Principio" =>"Agilidade, como dinâmica de ação.", 
     "Descricao" =>"sadsadsa", 
     ]; 

     var_dump($arr); 


     foreach($arr as $key=>&$value){ 
      if($key == "Para"){ 
       if(is_string($value)) { 
        $arrSplits = preg_split("#\s#", $value); 
        if (count($arrSplits) == 3) { 
         unset($arrSplits[1]); 
         $arr[$key] = implode(" ", $arrSplits); 
        } 
       } 
      } 
     } 

     var_dump($arr); 

1ST结果的var_dump

 array (size=4) 
      'De' => string 'treatee' (length=7) 
      'Para' => string 'Cristina Isabel Gnap' (length=20) 
      'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42) 
      'Descricao' => string 'sadsadsa' (length=8) 

2ND结果的var_dump

 array (size=4) 
      'De' => string 'treatee' (length=7) 
      'Para' => string 'Cristina Gnap' (length=13) 
      'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42) 
      'Descricao' => string 'sadsadsa' (length=8) 

或者,你可以封装以上到接受数组并传入数组的函数中,如下所示:

<?php 
     function removeMiddleNamesFromArray(&$dataArray){ 
      foreach($dataArray as $key=>&$value){ 
       if($key == "Para"){ 
        if(is_string($value)){ 
         $arrSplits  = preg_split("#\s#", $value); 
         if(count($arrSplits) == 3){ 
          unset($arrSplits[1]); 
          $arr[$key] = implode(" ", $arrSplits); 
         } 
        } 
       } 
      } 
      return $dataArray; 
     } 

     var_dump(removeMiddleNamesFromArray($arr)); 

转储

 array (size=4) 
      'De' => string 'treatee' (length=7) 
      'Para' => string 'Cristina Gnap' (length=13) 
      'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42) 
      'Descricao' => string 'sadsadsa' (length=8) 

或者,你可以封装到上述接受阵列和传递您的阵列,像这样一个功能:

+0

感谢您的回答,虽然它回报了我这个:'Warnin g:preg_split()期望参数2是字符串,数组给定' –

+1

@FelipeBueno在这种情况下,原始数组包含一些其他数组...现在已经更新该帖子以考虑到这一点.... – Poiz

0

请使用未设置()函数

$array = array { 
    ["De"]=> 
    string(7) "treatee" 
    ["Para"]=> 
    string(13) "Cristina Isabel Gnap" 
    ["Principio"]=> 
    string(36) "Agilidade, como dinâmica de ação." 
    ["Descricao"]=> 
    string(8) "sadsadsa" 
} 

unset($array['pra']);