Hé daar, ik heb een vraag.

ik probeer text te strippen dat tussen [ ] characters staat.
ik heb op het moment de volgende code:


<?php
function get_string_between($string, $start, $end){
   $string = " ".$string;
     $ini = strpos($string,$start);
     if ($ini == 0) return "";
     $ini += strlen($start);   
     $len = strpos($string,$end,$ini) - $ini;
     return substr($string,$ini,$len);
}

$string = "key[name]value[bram]url[file]";
echo get_string_between($string,"[","]");
?> 


dit werkt goed, maar het probleem is dat het als resultaat alleen name uitspuugt. hij stopt dus zodra die er één heeft gehad.

wat ik zou willen is dat die alle teksten die tussen [ ] tags staan eruit haald en allemaal in een aparte var zet:

$var1 = 'name';
$var2 = 'bram';
$var3 = 'file';

kunne jullie me opweg helpen?

alvast bedankt
Alsjeblieft!

<?php

	function parse($string)
	{
		// Find matches
		$matches = array();
		preg_match_all('/([^\[]+)(\[([^\]]*)\])/', $string, $matches);


		// Load array
		$array = array();
		for($i = 0; $i < sizeof($matches[0]); $i++)
		{
			if(isset($matches[1][$i]) && isset($matches[3][$i])) 
			{
				$array[$matches[1][$i]] = $matches[3][$i];
			}

		}

		return $array;
	}



	$string = "key[name]value[bram]url[file]";

	$array = parse($string);

	print_r($array);

?>
sorry voor mijn late reactie, maar ik was een tijde internetloos...
maargoed bedankt voor je hulp! dit stuk code werkte perfect..echter heb ik nog een vraagje..

het script werkt nu dus alsvolgt:


<form method="get" action="">
<?php
    function parse($string)
    {
        // Find matches
        $matches = array();
        preg_match_all('/([^\[]+)(\[([^\]]*)\])/', $string, $matches);
        // Laad array
        $array = array();
        for($i = 0; $i < sizeof($matches[0]); $i++)
        {
            if(isset($matches[1][$i]) && isset($matches[3][$i])) 
            {
                $array[$matches[1][$i]] = $matches[3][$i];
            }
        }
        return $array;
    }
    $string = $_GET['url'];
    $array = parse($string);
	foreach ($array as $data){ ?>
        
    	<input type="text" value="<?php echo $data; ?>"><br />	
	
<?php } ?>
</form>


wat ik nu wil proberen te doen is de string te herbouwen..zeg maar alle data tussen [ ] tekens word nu in een input veld geplaatst en die data kan dus weer aangepast worden en opnieuw worden gepost. wat ik dus wil is dat de nieuwe data terug word geplaatst tussen de [ ] tekens.
kan ik dit doen met preg_replace?

hopenlijk kun je me nogmaals op weg helpen.

bedankt, gr bram


<?php
function getStringBetween($string, $start, $end)
{
$row = array();
$r = explode($start, $string);
for ($i = 1; $i < count($r); $i++)
{
$temp = explode($end, $r[$i]);
$row[] = $temp[0];
}
return $row;
}
?>

Dat is dan mijn oplossing.
Wil je al die tags vervangen, kan je zoiets doen,, (niet getest)
<?php
$tags = getStringBetween($string, '[', ']');
foreach ($tags as $tag)
{
$string = str_replace('['. $tag .']', 'iets', $string);
}
echo $string;
?>
<?php

function parse($string)
{
// Find matches
$matches = array();
preg_match_all('/([^\[]+)(\[([^\]]*)\])/', $string, $matches);


// Load array
$array = array();
for($i = 0; $i < sizeof($matches[0]); $i++)
{
if(isset($matches[1][$i]) && isset($matches[3][$i]))
{
$array[$matches[1][$i]] = $matches[3][$i];
}

}

return $array;
}

function parse2($array)
{
$s = '';

foreach($array as $k => $v)
{
$s .= $k . '[' . $v . ']';
}

return $s;
}


$string = "key[name]value[bram]url[file]";
$array = parse($string);

print_r($array);

$string = parse2($array);
print_r($string);

?>

Reageren