Reputation: 3
I would like to replace the ,
with .
in some Keys like [Price]
for instance.
Given this array:
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
)
)
And the following function:
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);
}
}
}
}
Can someone help me please? I tried a couple of things but can't get it to work.
Upvotes: 0
Views: 2321
Reputation: 17205
Via array_walk_recursive if you want to change the values of an existing multi-dimensional array you need to specify the first argument of the callback as a reference by preceding the variable with an ampersand (&)
array_walk_recursive($data, function(&$item, $key){
if( $key == 'Price' ){
$item = str_replace(',','.',$item);
}
});
Upvotes: 0
Reputation: 6253
Change the main array, like this:
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);
}
}
}
}
In casu you wanted to do only on a set of keys, you would need to declare those keys and use this other function:
$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);
}
}
}
}
Upvotes: 1
Reputation: 1991
You can try this:
$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);
Output:
Array
(
[0] => Array
(
[price] => 60.53
)
[1] => Array
(
[price] => 9.34
)
)
Upvotes: 0
Reputation: 574
You can iterate through each element of associative array using array_walk_recursive
function.
Here $result
is your input array.
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)
to check the output after replacing ,
with .
Upvotes: 3