Hey guys,

Vinden jullie dat er een verschil zit tussen een ID en een key?

Stel we hebben een array:

<?php
$product[1] => 'radio';
$product[2] => 'tv';
?>
Wat klinkt dan logischer?

<?php
$id = 2;
$product = $product->get($id);
?>
óf

<?php
$key = 2;
$product = $product->get($key);
?>
En stel dat het ID/key een woord is, wat vind je dan logischer?

<?php
$language['dutch'] => 'Nederlands';
$language['german'] => 'Duits';
?>
Wat klinkt nu logischer?

<?php
$id = 'german';
$language = $language->get($id);
?>
óf

<?php
$key = 'german';
$language = $language->get($key);
?>
Gevoelsmatig, maar dat is dus heel persoonlijk, heb ik een lichte neiging om bij een getal (zoals bij het product) een ID logischer te vinden, terwijl ik bij een woord (zoals bij language) een lichte voorkeur heb voor een key.

Ervaren jullie dit ook zo? Of juist helemaal niet? Het gaat er bij deze vraag niet om wie er gelijk heeft. Ik ben met name beniewd of jullie een verschil ervaren tussen een ID en een key.
Klinkt als een key.

Waarom is 'images' het ID voor path /Users/Darsstar/images maar niet /Users/Ozzie/images ? '/Users/Darsstar/images' zou dan weer wel een goede ID zijn voor path /Users/Darsstar/images...
Het ID hoort bij/is deel van de value. Het is uniek onder alle verschillende values. Omdat het uniek is kun je het dus als een key gebruiken.
Ah zo bedoel je... als je meerdere image mappen zou hebben dan zou je inderdaad foo_images en bar_images als ID krijgen. Dat bedoel je toch denk ik?
Nee, want dan heeft die ene images map dus al 2 identifiers: images (wanneer hij in zijn eentje was) of foo_images (wanneer er ook nog een bar is). Dan is het dus geen identifier meer.
Wouter, ik snap het nog niet helemaal.

Stel ik heb een array:


$names['wouter'] = 'Wouter';
$names['dos]     = 'Dos';
$names['ozzie']  = 'Ozzie';

Wouter, dos en Ozzie zijn hier keys, maar tegelijkertijd toch ook ID's?
INDEX:

Computer science
- Lookup table, a data structure, usually an array or associative array, often used to replace a runtime computation with a simpler array indexing operation
- Array index, an integer pointer (into an array data structure) that identifies an element of the array
- A key in an associative array
- Database index, a data structure that improves the speed of data retrieval operations on a database table

http://en.wikipedia.org/wiki/Index
Dankjewel Frank... maar wat bedoel je nu... dat index het juiste woord is en niet ID?

Wat is een ID dan?

aaaah... ik word gek :-/
KEY

KeY, a software verification tool
Key, a data element which allows one to find associated data using a database index or a hash table

http://en.wikipedia.org/wiki/Key

[size=xsmall]Toevoeging op 04/05/2014 00:21:01:[/size]

Zover ik het nu beoordeel is spreek je van een index bij een gewone array en bij een associatieve array spreek je dan van een key.
>> Array index, an integer pointer (into an array data structure) that identifies an element of the array

>> Key, a data element which allows one to find associated data using a database index or a hash table

Dit is toch hetzelfde?

[size=xsmall]Toevoeging op 04/05/2014 00:35:16:[/size]

Pfff... k zie het nu even niet meer. Vooral de opmerking van Wouter:

"Nee, want dan heeft die ene images map dus al 2 identifiers: images (wanneer hij in zijn eentje was) of foo_images (wanneer er ook nog een bar is). Dan is het dus geen identifier meer."
Goed, we leggen het uit met een "real world example".

Jij heet Ozzie [size=xsmall](niet waar, maar we nemen dat nu even aan :p)[/size] en ik heet Wouter. Nou, denk je dat zijn hele mooie identifiers voor ons. Als je het hier op het forum hebt over "Wouter", dan denkt iedereen waarschijnlijk wel aan mij en als we het hebben over "Ozzie" dan denkt iedereen waarschijnlijk aan jouw. Maaarrr, nu komt er een "Ozzie JS" op het forum. Als we het dan hebben over "Ozzie", dan weet niemand meer of we jouw bedoelen of Ozzie JS. "Ozzie" is dus niet meer een correct identifier voor jouw of die andere ozzie. Dat betekend dat die "Ozzie" in het begin al geen goede identifier was en die "Wouter" dus ook niet.

Wat is dan wel een goede identifier? Nou, iets wat altijd uniek blijft. Denk bijv. aan jouw userid. "24209" komt jouw natuurlijk al meteen voor als Ozzie PHP (niet waar, maar voor het PHP systeem wel). "23590" is dan ik. Als nu die nieuwe Ozzie JS het forum op komt krijgt hij "30668" als userid, dat betekend dat jouw id nog steeds alleen uniek voor jouw is. Het userid is dus iets wat altijd uniek blijft en het is dus een goede identifier.

Nu is dat hetzelfde met de voorbeelden die jij gaf. Als je /Ozzie/Cms/import/images "images" noemt en er komt nog een images folder bij, dan moet je dus beide "images" gaan hernoemen naar "ozzie_images" en "wouter_images". En stel er komt nog een nieuwe images folder bij in de Ozzie map, dan moet je "ozzie_images" hernoemen naar "ozzie_cms_images" en "ozzie_framework_images". Dit is dus geen goede identifier, het is niet altijd uniek.
Aha... nu valt het kwartje. Dat is nog eens een top-uitleg!

Oké... tot zover snap ik het. Alleen nu twijfel ik dus wel of m'n benamingen kloppen, of dat ik ze anders moet gaan noemen.

Wat ik bijv. wil doen is dat ik makkelijk (ik kom maar even terug op dit voorbeeld) een pad kan oproepen.

Stel ik wil een images pad oproepen, dan wil ik zoiets kunnen doen: echo $path->get('images'). Alle paden staan in een array, dus 'images' is altijd uniek. Maar inderdaad, komt er een 2e 'images' map bij, dan heb ik een probleem.

Nu is mijn eerste vraag, in het voorbeeld hierboven noem ik 'images' een ID. In de method gebruik ik dus ook de variabele $id. Klopt dat? Is de naam $id juist?

<?php
public function get($id) {
return $this->paths[$id];
}
?>
En dan de 2e vraag... hoe krijg ik die id/key/index 'images' dan uniek? Door ze meteen al vanaf het begin een unieke naam te geven? Dus niet 'images', maar 'ozzie_images'? Is dat de oplossing?

Reageren