benim veritabanında ben bir ağaç yapısı ile bir dizi oluşturmaHer diziyi çok boyutlu bir dizide benzersiz bir tanımlayıcıya nasıl verebilirim?
mylist/folder1/horse/fred
mylist/folder1/cat/john
mylist/folder2/cat/sam
mylist/folder2/cat/cat/john
içindeki bazı yolları vardır:
function explodeTree($array, $delimiter = "_", $baseval = false) {
if(!is_array($array)) return false;
$splitRE = "/" . preg_quote($delimiter, "/") . "/";
$returnArr = array();
foreach ($array as $key => $val) {
$parts = preg_split($splitRE, $key, -1, PREG_SPLIT_NO_EMPTY);
$leafPart = array_pop($parts);
$parentArr = &$returnArr;
foreach ($parts as $part) {
if (!isset($parentArr[$part])) {
$parentArr[$part] = array();
} elseif (!is_array($parentArr[$part])) {
if ($baseval) {
$parentArr[$part] = array("__base_val" => $parentArr[$part]);
} else {
$parentArr[$part] = array();
}
}
$parentArr = &$parentArr[$part];
}
if (empty($parentArr[$leafPart])) {
$parentArr[$leafPart] = $val;
} elseif ($baseval && is_array($parentArr[$leafPart])) {
$parentArr[$leafPart]["__base_val"] = $val;
}
}
return $returnArr;
}
$sql = "SELECT path, path FROM mylist WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$array = $q->fetchAll(PDO::FETCH_KEY_PAIR);
$tree = explodeTree($array, "/");
sonuç
array(1) {
["mylist"]=>
array(2) {
["folder1"]=>
array(2) {
["horse"]=>
array(1) {
["fred"]=>
string(30) "mylist/folder1/horse/fred"
}
["cat"]=>
array(1) {
["john"]=>
string(28) "mylist/folder1/cat/john"
}
}
["folder2"]=>
array(1) {
["cat"]=>
array(2) {
["sam"]=>
string(27) "mylist/folder2/cat/sam"
["cat"]=>
array(1) {
["john"]=>
string(32) "mylist/folder2/cat/cat/john"
}
}
}
}
}
her diziyi vermek mümkün mü benzersiz bir tanımlayıcı mı? Bu önemli çünkü daha sonra cat
belirli dizi için örnek aramaya ihtiyacım var. Ancak cat
birden fazla kez var ve şu anda hangi cat
aradığımı belirleyemiyorum.
Tüm diziler her zaman bir benzersiz bir tanımlayıcı var. Hiyerarşiye dayanan anahtarlar zincirleme. – cpugourou
Dizinin dizini, ör. 'PetID'. Yani dizilerinizin ilk dizini ARRAY () = ARRAY ('kedi', ....) gibi bir şey gibi görünüyor. Herhangi bir evcil hayvana $ arr [$ petID] 'ile doğrudan erişebildiğiniz. –
djot
@djot Tamam, seni anladığımda, "$ sql =" SELECT yolunu yazmalıyım, MİLİDİNDEN DOĞRUDAN WHERE id =? "; – Jarla