Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #8748

Re: split array and string from string (trust me it will make sense when you read)

From Jerry Stuckle <jstucklex@attglobal.net>
Newsgroups comp.lang.php
Subject Re: split array and string from string (trust me it will make sense when you read)
Date 2013-03-19 20:45 -0400
Organization A noiseless patient Spider
Message-ID <kib0o8$sp9$1@dont-email.me> (permalink)
References <a9993724-7709-41e0-9412-02ed3056d12d@googlegroups.com> <ki9np5$2ll$3@dont-email.me> <3514efbb-74a4-41e7-8fac-2092a94cbc95@googlegroups.com>

Show all headers | View raw


On 3/19/2013 8:34 PM, CloudPress wrote:
> On Tuesday, March 19, 2013 6:06:28 AM UTC-7, Jerry Stuckle wrote:
>> On 3/19/2013 12:12 AM, CloudPress wrote:
>>
>>> I have a string that consists of several key value pairs such as [key=value], a given key may appear more than once.
>>
>>>
>>
>>> For example a string of:
>>
>>>
>>
>>> "Hello world, [key=value] [key2=value1] This is just a test. [key=value2]"
>>
>>>
>>
>>> I want to do two things, one I want an easier way to view the key value pairs, I am thinking an array
>>
>>>
>>
>>> array ('key' => array ('value', 'value2'), 'key2' => 'value1');
>>
>>>
>>
>>> Secondly I want the key/value pairs removed from the string so I would get the array and a new string that would look like this:
>>
>>>
>>
>>> "Hello world, This is just a test."
>>
>>>
>>
>>> What would be the easiest way to accomplish this?
>>
>>>
>>
>>
>>
>> Maybe a regex?
>>
>>
> Truth be told I don't know anything about regex. I threw together an example of how I think I can step though a string to do this.
>
> $actions = array();
> 	$done = false;
> 	while (!$done) {
> 		$start = strpos($content, "[");
> 		$end = strpos($content, "]");
> 		$equal = strpos($content, "=");
> 		$key = "";
> 		$value = "";
> 		if ($equal != false && $equal > $start && $equal < $end) {
> 			$key = substr($content, $start + 1, $equal - $start);
> 			$value = substr($content, $equal + 1, $end - $equal);
> 			if (array_key_exists($key, $actions)) {
> 				if (is_array($actions[$key])) {
> 					$actions[$key][] = $value;
> 				}else{
> 					$existing_value = $actions[$key];
> 					$actions[$key] = array ($existing_value, $value);
> 				}
> 			}else{
> 				$actions[$key] = $value;
> 			}
> 			str_replace("[" . $key . "=" . $value . "]", "", $content, 1);
> 		}else{
> 			$key = substr($content, $start + 1, $end - $start);
> 			$actions[$key] = true;
> 			str_replace("[" . $key . "]", "", $content, 1);
> 		}
> 		if ($start == false || $end == false) {
> 			$done = true;
> 		}
> 	}
>
> This should...in theory find the first set of brackets if there is a "=" it should separate out the part before the = as the key and the part after as the value, add to an array, using a sub array if the same key is duplicated with different values. If not it will just store the text as the key with a value of true. It will then replace the full sub-string from [ to ] with null effectively removing it then search for the next one until it finds no more bracket sets.
>
> Any feedback, ideas on a better implementation?
>

That's the hard way.  Look up a regex tutorial - there are several good 
ones on the internet.  What you're looking for shouldn't be that hard 
(even I could probably come up with something even though I'm by far not 
an expert in regex).

Then look at the preg_xxx() functions in PHP.

The only thing to remember is in PHP you need a separator character at 
the start and end of the regex string, i.e. '!regex goes here!'.  It 
doesn't have to be an ! - it can be any character, preferably one not in 
the regex.

And please don't top post.  This newsgroup (and most of usenet) uses 
bottom or interleaved posting.  Thanks.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-18 21:12 -0700
  Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-18 21:17 -0700
  Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 09:06 -0400
    Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-19 17:34 -0700
      Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 20:45 -0400
        Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-19 17:56 -0700
          Re: split array and string from string (trust me it will make sense when you read) Christoph Becker <cmbecker69@gmx.de> - 2013-03-20 02:21 +0100
          Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 21:43 -0400

csiph-web