2016-06-09 114 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']);