Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 277
  • Last Modified:

Add char to each string element

Hi,

I have this:
$Str='test(4)-test(51)-test(9)-test(12)-test(33)-test(4)';
$something_here='';
foreach(explode('-',$Str) as $xx) {
            	$string1=(preg_replace("/\([0-9]\)/", $something_here, $xx));
}
echo $string1;

Open in new window

So as you can see I need to replace elements inside brackets if there's just one digit, more specifically, I want to add '0' (zero) before this digit. I just need $something_here var, but can't manage with that, please help. Or you can think about different way to do that.
I want this output:
test(04)-test(51)-test(09)-test(12)-test(33)-test(04)

Open in new window


Thanks.
0
Zado
Asked:
Zado
  • 7
  • 4
  • 2
  • +1
3 Solutions
 
pak_slmCommented:
Is there Number if test() is fixed, mean  in you string test() present 6 time?
0
 
ZadoAuthor Commented:
No, it could be any word or number there
0
 
pak_slmCommented:
i mean count is fixed to 6 or vary.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
darren-w-Commented:
how about this:

replace this line to :

$string1=(preg_replace_callback("/\([0-9]\)/","addzero", $xx));

add this function:

function addzero($matches)
{
if (strlen($matches)<2){
$matches= "0".$matches;
}
return $matches;
}
0
 
ZadoAuthor Commented:
vary, it could be:
asdf(4)-0000000(51)-test1(09)-test2(12)-tesssst(33)-test(4)-12345(1)

Open in new window

but always hyphen separated and one or two digits in brackets
0
 
ZadoAuthor Commented:
Thanks darren-w-, I changed a bit your script and almost works, it adds zero before one digit, but changes this digit into 'Array' in output, that's the only problem.

function addzero($matches)
{
if (strlen($matches)<6){
$matches= "0".$matches;
}
return '('.$matches.')';
}

foreach(explode('-',$Str) as $xx) {
				$string1=(preg_replace_callback("/\([0-9]\)/", "addzero", $Str));
}
echo $string1;

Open in new window

It changes this:
test(4)-test(51)-test(9)-test(12)-test(33)-test(4)

Open in new window

into this:
test(0Array)-test(51)-test(0Array)-test(12)-test(33)-test(0Array)

Open in new window

but should be this:
test(04)-test(51)-test(09)-test(12)-test(33)-test(04)

Open in new window

0
 
ZadoAuthor Commented:
Ok, solution is closer here:

function addzero($matches)
{
if (strlen($matches)<6){
$matches= "0".$matches[0];
}
return $matches;
}

foreach(explode('-',$Str) as $xx) {
				$string1=(preg_replace_callback("/\([0-9]\)/", "addzero", $Str));
}
echo $string1;

Open in new window


Just need to move opening bracket before zero, it gives this output:
      

test0(4)-test(51)-test0(9)-test(12)-test(33)-test0(4)

Open in new window

0
 
n4r-c0mCommented:
    function addzero($m) {
        $m = $m[1];
        if (strlen($m)<2) {
            $m= "(0".$m.")";
        }
        return $m;
    }

    $Str='test(4)-test(51)-test(9)-test(12)-test(33)-test(4)';
    $something_here='';
    foreach(explode('-',$Str) as $xx) {
                    $string1=(preg_replace_callback("/\(([0-9])\)/","addzero", $xx));
                    echo $string1;
    }

Open in new window

0
 
darren-w-Commented:
$Str='test(4)-test(51)-test(9)-test(12)-test(33)-test(4)';
$patterns=array();
$patterns[0] = "/\({1}[0-9]\)/";
$patternsr=array();
$patternsr[0] = "(0\${1}1)";
print preg_replace($patterns,$patternsr,$Str);

returns

test(01)-test(51)-test(01)-test(12)-test(33)-test(01)
0
 
darren-w-Commented:
oops thats wrong
0
 
ZadoAuthor Commented:
OK, done:

My solution (darren's script changed actually):
function addzero($matches) {
	if (strlen($matches)<6) {
		$matches= "0".$matches[0];
    	foreach(explode('(',$matches) as $yy) {
       		$matches=(preg_replace("/\(/", "", $matches));
        }
  	}
  	return '('.$matches;
}

foreach(explode('-',$Str) as $xx) {
	$string1=(preg_replace_callback("/\([0-9]\)/", "addzero", $Str));
}
echo $string1;

Open in new window


@n4r-c0m solution (corrected):
$string1=(preg_replace_callback("/\(([0-9])\)/","addzero2", $xx)); changed to
$string1=(preg_replace_callback("/\(([0-9])\)/","addzero2", $Str)); that's my fault, I gave it in question.
Plus move echo out from foreach loop.
function addzero2($m) {
        $m = $m[1];
        if (strlen($m)<2) {
            $m= "(0".$m.")";
        }
        return $m;
    }

    foreach(explode('-',$Str) as $xx) {
                    $string1=(preg_replace_callback("/\(([0-9])\)/","addzero2", $Str));
    }
	echo $string1;

Open in new window


Thanks a lot for your help.
0
 
darren-w-Commented:
Simplified this a little:

<?php
$Str='test(4)-test(51444)-test(9)-test(122)-test(33)-test(1)';
$patterns=array("/\(([0-9])\)/");
$patternsr=array("(0$1)");
print preg_replace($patterns,$patternsr,$Str);
?>

returns: test(04)-test(51444)-test(09)-test(122)-test(33)-test(01)

without callback
0
 
n4r-c0mCommented:
Great solution!
More simplify :) :

$Str='test(4)-test(51444)-test(9)-test(122)-test(33)-test(1)';
print preg_replace("/\(([0-9])\)/","(0$1)",$Str);

Open in new window

0
 
ZadoAuthor Commented:
Thanks for help :-)
0
 
ZadoAuthor Commented:
I found proper solution based on experts comments, I just changed a bit their scripts, but my comment presents actual solution.
Thanks.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 7
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now