wpforge
Goto Top

PHP - String aufbrechen und speichern

Hallo,
ich habe viele Strings, die nach folgendem Muster aufgebaut sind:

$str = "topCat/subcat/subsubCat/.../endpoint";

Die "Tiefe" dieser Schachtelung ist dabei variabel.

nun soll anhand einer zählvariablen jedes item eine id bekommen und ich hätte gern eine Liste nach dem Motto:
item item_id parent_id

Zur Veranschaulichung nehmen wir an, dass es sich bei den Strings um alle "Endkategorien" eines Shops handelt.

Also zum Beispiel
"elekto/größgeräte/waschmaschinen"
"elekto/größgeräte/trockner/abluft"

ich habe eine Lösung, die mir zunächst einen entsprechend geschachtelten Array bringt, auf dessen Basis sich so eine Tabelle erstellen lässt.
Allerdings ist die mögliche Tiefe in diesem Fall hardcoded.
Das ist unschön und ich suche eine Lösung, welche sowas quasi in eine beliebige Tiefe (int_max) erlaubt.

Vllt. hat ja jemand eine Idee.
Danke schon mal für eure Antworten.

Content-Key: 371914

Url: https://administrator.de/contentid/371914

Printed on: April 18, 2024 at 15:04 o'clock

Mitglied: 136037
136037 Apr 22, 2018 updated at 10:13:02 (UTC)
Goto Top
Hi,
ich sehe da kein Problem:
<?php
$strings = array(
	"elekto/größgeräte/waschmaschinen",  
	"elekto/größgeräte/trockner/abluft",  
);
foreach($strings as $string){
	$result = preg_split('/\//',$string);  
	if($result !== false){
		$itm = $result[count($result)-1];
		$parent = $result[count($result)-2];
		echo "Parent of item '$itm' is '$parent'.<br>";  
	}
}
?>
Gruß
Member: WPFORGE
WPFORGE Apr 22, 2018 at 13:05:13 (UTC)
Goto Top
Das was du da gemacht hast würde zuürkgeben:
Parent of item waschmaschinen is größgeräte
Parent of item abluft is trockner

Was ich aber bräuchte:
Parent of item elekto is 0
Parent of item größgeräte is elekto
Parent of item waschmaschinen is größgeräte
für den ersten string...
für den zweiten entsprechend...
Mitglied: 136037
Solution 136037 Apr 22, 2018 updated at 13:36:14 (UTC)
Goto Top
Was ich aber bräuchte:
Wenn man's weiß kein Problem, leider war deine Schilderung diesbezüglich etwas schwammig face-confused.
In dem Fall ist das super einfach, denn du durchläufst einfach das preg_split array mit einer for-Schleife und nimmst für den Parent einfach den aktuellen Array-Index -1, fertig face-smile.
<?php
$strings = array(
	"elekto/größgeräte/waschmaschinen",  
	"elekto/größgeräte/trockner/abluft",  
);
$tblParents = array();

foreach($strings as $string){
	$result = preg_split('/\//',$string);  
	if($result !== false){
		for ($i = 0; $i < count($result);$i++){
			$cat = $result[$i];
			$parent = ($result[$i-1] != "") ? $result[$i-1] : 0;  
			if (!array_key_exists($cat,$tblParents)){
				$tblParents[$cat] = $parent;
			}
		}
	}
}
echo '<pre>' . print_r($tblParents, true) . '</pre>';  
?>