开发者

Modify numbers inside a string PHP

开发者 https://www.devze.com 2023-03-19 18:05 出处:网络
I have a string like this: $string = \"1,4|2,64|3,0|4,18|\"; Which is the easiest way to access a number after a comma?

I have a string like this:

$string = "1,4|2,64|3,0|4,18|";

Which is the easiest way to access a number after a comma?

For example, if I have:

$whichOne = 2;

If whichOne is equal to 2, then I want to put 64 in a string, and add a number to it, and then put it back again where it belongs (开发者_如何转开发next to 2,)

Hope you understand!


genesis'es answer with modification

$search_for = 2;
$pairs = explode("|", $string);
foreach ($pairs as $index=>$pair)
{
    $numbers = explode(',',$pair);
    if ($numbers[0] == $search_for){
        //do whatever you want here
        //for example:
        $numbers[1] += 100; // 100 + 64 = 164
        $pairs[index] = implode(',',$numbers); //push them back
        break;
    }
}
$new_string = implode('|',$pairs);


$numbers = explode("|", $string);
foreach ($numbers as $number)
{
    $int[] = intval($number);
}

print_r($int);


$string = "1,4|2,64|3,0|4,18|";
$coordinates = explode('|', $string);
foreach ($coordinates as $v) {
    if ($v) {
        $ex = explode(',', $v);
        $values[$ex[0]] = $ex[1];
    }
}

To find the value of say, 2, you can use $whichOne = $values[2];, which is 64


I think it is much better to use the foreach like everyone else has suggested, but you could do it like the below:

$string = "1,4|2,64|3,0|4,18|";
$whichOne = "2";

echo "Starting String: $string <br>";

$pos = strpos($string, $whichOne);

//Accomodates for the number 2 and the comma
$valuepos = substr($string, $pos + 2);

$tempstring = explode("|", $valuepos);
$value = $tempstring[0];  //This will ow be 64

$newValue = $value + 18;

//Ensures you only replace the index of 2, not any other values of 64
$replaceValue = "|".$whichOne.",".$value;
$newValue = "|".$whichOne.",".$newValue;

$string = str_replace($replaceValue, $newValue, $string);

echo "Ending String: $string";

This results in:

Starting String: 1,4|2,64|3,0|4,18|
Ending String: 1,4|2,82|3,0|4,18|

You could run into issues if there is more than one index of 2... this will only work with the first instance of 2.

Hope this helps!


I know this question is already answered, but I did one-line solution (and maybe it's faster, too):

$string = "1,4|2,64|3,0|4,18|";

$whichOne = 2;
$increment = 100;

echo preg_replace("/({$whichOne},)(\d+)/e", "'\\1'.(\\2+$increment)", $string);

Example run in a console:

noice-macbook:~/temp% php 6642400.php
1,4|2,164|3,0|4,18|

See http://us.php.net/manual/en/function.preg-replace.php

0

精彩评论

暂无评论...
验证码 换一张
取 消