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-ID: 371914

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

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

136037
136037 22.04.2018 aktualisiert um 12:13:02 Uhr
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ß
WPFORGE
WPFORGE 22.04.2018 um 15:05:13 Uhr
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...
136037
Lösung 136037 22.04.2018 aktualisiert um 15:36:14 Uhr
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>';  
?>