2015-11-03 127 views
0

我想用.代替,,例如[Price]str_replace多維數組中的特定值

鑑於此陣:

Array 
(
    [0] => Array 
     (
      [Product line] => Misc 
      [Seller] => aaa.com 
      [Tracking ID] => bbbb 
      [Date shipped] => October 23, 2015 
      [Price] => 60,43 
      [Referral fee rate] => 3,00%     
      [Quantity] => 2 
      [Revenue] => 120,86 
      [Earnings] => 3,62 
      [Sub Tag] => xxxx 
     ) 

    [1] => Array 
     (
      [Product line] => Misc 
      [Seller] => aaaa.com 
      [Tracking ID] => bbbb 
      [Date shipped] => October 23, 2015 
      [Price] => 9,34 
      [Referral fee rate] => 6,96%     
      [Quantity] => 1 
      [Revenue] => 9,34 
      [Earnings] => 0,65 
      [Sub Tag] => xxxx 
     ) 
) 

而且有以下功能:

function str_replace_specific_value($sSearch, $sReplace, &$aSubject){ 
    foreach($aSubject as $sKey => $uknValue) { 
     if(is_array($uknValue)) { 
      foreach($sKey as $fKey => $fuknValue) { 
       $uknValue['Price'] = str_replace($sSearch, $sReplace, $fuknValue); 
      } 
     } 
    } 
} 

有人能幫助我嗎?我嘗試了一些東西,但無法使其工作。

+0

謝謝,你可以去看看我剛剛發佈的功能?我很接近,但有些東西仍然不正確 – cliff

+0

而不是所有的循環,爲什麼不使用['array_walk_recursive()'](http://php.net/array_walk_recursive)? (檢查註釋以查看如何更改回調函數中的數組) – kero

+1

作爲一個側面提示,您應該真正從函數返回修改後的數組,而不是通過引用發送原始數據;您目前的方法使測試和故障排除非常困難。 – jeroen

回答

0

您可以使用array_walk_recursive函數遍歷關聯數組中的每個元素。

這裏$result是你的輸入數組。

array_walk_recursive($result, 'replacer'); 

/** 
* Replace comma with dot from 'Price' element of associative array. 
* This function call recursively 
* 
* @access public 
* 
* @param string|int|null $item 
* @param string $key 
* @return void 
*/ 
public function replacer(& $item, $key) 
{ 
    if ($key == 'Price') { 
     $item = str_replace(",", ".", $item); 
    } 
} 

var_dump($result).

+0

非常感謝,這解決了我的問題。似乎也是一種有效的方法。剛剛將錯字從'$ item = str_replace(「,」,「。:,$ item);'改爲'$ item = str_replace(」,「,」。「,$ item);' – cliff

+0

@cliff謝謝,我已更新代碼 –

1

更改主陣列,像這樣:

function str_replace_specific_value($sSearch, $sReplace, &$aSubject){ 
    foreach($aSubject as $key => $sub_array) { 
     if(is_array($sub_array)) { 
      foreach($sub_array as $sub_key => $sub_value) { 
       $sSubject[$key][$sub_key] = str_replace($sSearch, $sReplace, $sub_value); 
      } 
     } 
    } 
} 

此處是指應你想只在一組鍵做的,你就需要聲明那些鍵,並使用這個其他功能:

$keys_to_be_replaced = ['price','whatever']; 

function str_replace_specific_value($sSearch, $sReplace, &$aSubject, $keys_to_be_replaced){ 
    foreach($aSubject as $key => $sub_array) { 
     if(is_array($sub_array)) { 
      foreach($sub_array as $sub_key => $sub_value) { 
       if(in_array($sub_key,$keys_to_be_replaced)) 
        $sSubject[$key][$sub_key] = str_replace($sSearch, $sReplace, $sub_value); 
      } 
     } 
    } 
} 
+1

感謝您的輸入vivoconunxino,我決定去@Devendra Bhandari的方法 – cliff

0

更換,你可以試試這個後檢查輸出:

$arr[0] = array("price" => "60,53"); 
$arr[1] = array("price" => "9,34"); 

foreach ($arr AS $key => $value) { 
    $arr[$key]["price"] = str_replace(",", ".", $arr[$key]["price"]); 
} 
echo "<pre>"; 
print_r($arr); 

輸出:

Array 
(
    [0] => Array 
     (
      [price] => 60.53 
     ) 

    [1] => Array 
     (
      [price] => 9.34 
     ) 

) 
+0

感謝您的意見,我決定採用@Devendra Bhandari的方法 – cliff