News for hackers. Stuff that matters.
Re:PHP 7's new hashtable implementation by brazzy on Tuesday December 23, 2014 @03:29AM (#8787296)
> My complaint is that PHP's only first-class array type is a weird array/map combo. Have you ever seen anything like that in another language?

Um, Javascript?

Re:PHP 7's new hashtable implementation by shimonamit on Tuesday December 23, 2014 @03:43AM (#8787335)
Javascript's arrays cannot be used as maps or associative arrays. Arrays require numeric, consecutive keys. Otherwise it's an Object.

--

Clarification edit: Creating a new key on an array using arr['key']=1 creates a property on the arr Object but does not add an element to the standard array.

http://stackoverflow.com/questions/8630471/strings-as-keys-o...

Re:PHP 7's new hashtable implementation by mc808 on Tuesday December 23, 2014 @04:01AM (#8787366)
Arrays are always objects in JavaScript, and they can be extended like any other object or used as maps (barring key conflicts).
Re:PHP 7's new hashtable implementation by dsp1234 on Tuesday December 23, 2014 @04:46AM (#8787486)
Adding non-numeric keys does not remove an Array's "arrayness" in JavaScript

  var x = [];
  console.log(Object.prototype.toString.call(x));
  //[object Array]
  
  x[0] = 1;
  console.log(x[0]);
  //1
  
  x["test"] = 2;
  console.log(x["test"]);
  //2
  
  console.log(Object.prototype.toString.call(x));
  //[object Array]
  
  x.map
  //function map() { [native code] }

  var y = {};
  
  console.log(Object.prototype.toString.call(y));
  //[object Object]
  
  y.map
  //undefined
Re:PHP 7's new hashtable implementation by nothrabannosir on Tuesday December 23, 2014 @09:14AM (#8788150)
His point was:

    x = [1]; x["test"] = 555; x.map(function (y) { return y; });
    // [1]
That's [1], not [1, 555]. You can access the array from the map interface, but not the other way around.
Re:PHP 7's new hashtable implementation by dsp1234 on Tuesday December 23, 2014 @01:14PM (#8789298)
The array prototype functions are only specified by the standard to deal solely with numeric keys, but the lines between and object and array are still pretty blurry. The use case for each is different, but the original question far above was "array/map combo. Have you ever seen anything like that in another language?", and clearly JavaScript is very similar even if not exact.

  var x = {};
  x[0] = 1;
  x.length = 1;
  x.map = Array.prototype.map;
  x.map(function(y) {return y;});
  //[1]
Re:PHP 7's new hashtable implementation by the_mitsuhiko on Tuesday December 23, 2014 @05:40AM (#8787597)
It does internally. Pretty sure that's even defined in the standard.
Re:PHP 7's new hashtable implementation by gsnedders on Tuesday December 23, 2014 @07:53PM (#8791030)
No, it doesn't. The only magic per spec is about the "length" property (which is essentially a getter/setter pair, despite being a data property and not an accessor pair). That's the only thing special about arrays in JS.
Re:PHP 7's new hashtable implementation by cgrand-net on Tuesday December 23, 2014 @06:25AM (#8787726)
If you can't observe a difference, does it matter?
Re:PHP 7's new hashtable implementation by robocat on Tuesday December 23, 2014 @05:07AM (#8787518)
Arrays are full objects e.g. function(){ var x = []; x.foo = "bar"; return x.foo;} returns "bar".

That is the whole reason prototype.js library broke the use of for (var x in somearray) because the library set properties on Array.prototype.

Re:PHP 7's new hashtable implementation by aikah on Tuesday December 23, 2014 @06:28AM (#8787731)
Nope.

Array are objects,but all objects aren't Arrays.

    var a={};

    a instanceof Array // false
Furthermore,Javascript objects aren't maps.