Sometimes I need to build an array of lists with a one to many type relationship.
For example this data:
1. item1 has a parent of key1.
2. item2 has a parent of key2.
3. item3 has a parent of key1.
Using PHP after packing the array I will end up with something like this:
<pre class="brush: php; title: ; notranslate" title="">
<?php
$m = array();
$m['key1'][] = 'item1';
$m['key2'][] = 'item2';
$m['key1'][] = 'item3';
print_r($m);
?>
Result:
<pre class="brush: php; title: ; notranslate" title="">
Array
(
[key1] => Array
(
[0] => item1
[1] => item3
)
[key2] => Array
(
[0] => item2
)
)
In javascript there is some options to do something similar. I ended up with something like this:
packedArr['key1'] = "item1,item3"
packedArr['key2'] = "item2"
Not exactly array in array[key] but the comma separated list did what I needed.
Here is the javascript itself. To test it you can use online javascript testers or just make up a html page with a button and maybe have onclick display document.getElementById("demo").innerHTML = output;
<pre class="brush: jscript; title: ; notranslate" title="">
<script>
function packArr() {
var pA = Array();
var inA = [
["child1","parent1"],
["child2","parent2"],
["child3","parent1"],
["child4","parent1"],
["child5","parent2"]
];
var inALen = inA.length;
for (var i = 0; i < inALen; i++) {
//alert(inA[i]);
if (pA[inA[i][1]] == null) {
pA[inA[i][1]] = inA[i][0];
} else {
pA[inA[i][1]] = pA[inA[i][1]] + "," + inA[i][0];
}
}
res="";
for ( var key in pA ) {
res = res + key + ": " + pA[key] + "<br>";
};
//res = myArray["parent1"];
document.getElementById("demo").innerHTML = res;
}
</script>