function testMixedOffsets() { $o = array(new O(), new O(), new O(), new O(), new O(), new O(), new O()); $l = new L(); $l->append(2, 3); $l->append(2, '4'); $l->append(2, $o[0]); $this->assertEquals(1, count($l)); $this->assertSame(array(2 => a(3, '4', $o[0])), $l->toArray()); $this->assertSame(array(3, '4', $o[0]), $l[2]); $this->assertSame(array(), $l[3]); $l->append($o[1], 5); $l->append($o[1], '6'); $l->append($o[1], $o[2]); $l->append($o[3], $o[2]); $this->assertEquals(3, count($l)); $this->assertSame(array(2 => a(2, a(3, '4', $o[0])), id($o[1]) => a($o[1], a(5, '6', $o[2])), id($o[3]) => a($o[3], a($o[2]))), $l->toArray()); $this->assertSame(array(3, '4', $o[0]), $l[2]); $this->assertSame(array(5, '6', $o[2]), $l[$o[1]]); $this->assertSame(array(), $l[$o[2]]); $l->append('a', 7); $l->append('a', true); $l->append('a', $o[4]); $l->append('b', $o[5]); $l->append('b', $o[5]); $l->append('c', $o[6]); $this->assertEquals(6, count($l)); $this->assertSame(array(2 => a(2, a(3, '4', $o[0])), id($o[1]) => a($o[1], a(5, '6', $o[2])), id($o[3]) => a($o[3], a($o[2])), 'a' => a('a', a(7, true, $o[4])), 'b' => a('b', a($o[5], $o[5])), 'c' => a('c', a($o[6]))), $l->toArray()); $this->assertSame(array(3, '4', $o[0]), $l[2]); $this->assertSame(array(), $l[3]); $this->assertSame(array(5, '6', $o[2]), $l[$o[1]]); $this->assertSame(array(), $l[$o[2]]); $this->assertSame(array(7, true, $o[4]), $l['a']); $this->assertSame(array($o[6]), $l['c']); $this->assertSame(array(), $l[$o[2]]); unset($l[$o[1]]); unset($l['a']); unset($l[2]); $this->assertEquals(3, count($l)); $this->assertSame(array(id($o[3]) => a($o[3], a($o[2])), 'b' => a('b', a($o[5], $o[5])), 'c' => a('c', a($o[6]))), $l->toArray()); unset($l[id($o[3])]); unset($l['b']); unset($l['c']); unset($l['d']); $this->assertEquals(0, count($l)); $this->assertSame(array(), $l->toArray()); }
/** * <p><b>Syntax</b>: toLookup ([keySelector {{(v, k) ==> key} [, valueSelector {{(v, k) ==> value}]]) * <p>Creates a {@link Lookup} from a sequence according to specified key selector and value selector functions. * <p>The toLookup method returns a Lookup, a one-to-many dictionary that maps keys to collections of values. * @param callable|null $keySelector {(v, k) ==> key} A function to extract a key from each element. Default: key. * @param callable|null $valueSelector {(v, k) ==> value} A transform function to produce a result value from each element. Default: value. * @return collections\Lookup A Lookup that contains values selected from the input sequence. */ public function toLookup($keySelector = null, $valueSelector = null) { $keySelector = Utils::createLambda($keySelector, 'v,k', Functions::$key); $valueSelector = Utils::createLambda($valueSelector, 'v,k', Functions::$value); $lookup = new c\Lookup(); foreach ($this as $k => $v) { $lookup->append(call_user_func($keySelector, $v, $k), call_user_func($valueSelector, $v, $k)); } return $lookup; }