Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Add char to each string element

Posted on 2010-11-26
15
Medium Priority
?
274 Views
Last Modified: 2012-05-10
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
Comment
Question by:Zado
  • 7
  • 4
  • 2
  • +1
15 Comments
 
LVL 1

Expert Comment

by:pak_slm
ID: 34216739
Is there Number if test() is fixed, mean  in you string test() present 6 time?
0
 
LVL 8

Author Comment

by:Zado
ID: 34216772
No, it could be any word or number there
0
 
LVL 1

Expert Comment

by:pak_slm
ID: 34216815
i mean count is fixed to 6 or vary.
0
Industry Leaders: 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!

 
LVL 13

Assisted Solution

by:darren-w-
darren-w- earned 1000 total points
ID: 34216852
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
 
LVL 8

Author Comment

by:Zado
ID: 34216856
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
 
LVL 8

Author Comment

by:Zado
ID: 34216971
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
 
LVL 8

Author Comment

by:Zado
ID: 34217022
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
 
LVL 1

Assisted Solution

by:n4r-c0m
n4r-c0m earned 1000 total points
ID: 34217053
    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
 
LVL 13

Expert Comment

by:darren-w-
ID: 34217059
$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
 
LVL 13

Expert Comment

by:darren-w-
ID: 34217069
oops thats wrong
0
 
LVL 8

Accepted Solution

by:
Zado earned 0 total points
ID: 34217148
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
 
LVL 13

Expert Comment

by:darren-w-
ID: 34217489
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
 
LVL 1

Expert Comment

by:n4r-c0m
ID: 34217584
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
 
LVL 8

Author Comment

by:Zado
ID: 34237547
Thanks for help :-)
0
 
LVL 8

Author Closing Comment

by:Zado
ID: 34246245
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

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many old projects have bad code, but the budget doesn't exist to rewrite the codebase. You can update this code to be safer by introducing contemporary input validation, sanitation, and safer database queries.
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
The viewer will learn how to count occurrences of each item in an array.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Suggested Courses

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question