public function testArrayInterleave() { $this->assertEquals([], Arrays::interleave('x', [])); $this->assertEquals(['y'], Arrays::interleave('x', ['y'])); $this->assertEquals(['y', 'x', 'z'], Arrays::interleave('x', ['y', 'z'])); $this->assertEquals(['y', 'x', 'z'], Arrays::interleave('x', ['kangaroo' => 'y', 'marmoset' => 'z'])); $obj1 = (object) []; $obj2 = (object) []; $this->assertEquals([$obj1, $obj2, $obj1, $obj2, $obj1], Arrays::interleave($obj2, [$obj1, $obj1, $obj1])); $implode_tests = ['' => [1, 2, 3], 'x' => [1, 2, 3], 'y' => [], 'z' => [1]]; foreach ($implode_tests as $x => $y) { $this->assertEquals(implode('', Arrays::interleave($x, $y)), implode($x, $y)); } }
/** * Add an element between every two elements of some array. That is, given a * list `A, B, C, D`, and some element to interleave, `x`, this function returns * `A, x, B, x, C, x, D`. This works like `implode()`, but does not concatenate * the list into a string. In particular: * * implode('', array_interleave($x, $list)); * * ...is equivalent to: * * implode($x, $list); * * One case where this is useful is in rendering lists of HTML elements * separated by some character, like a middle dot: * * phutil_tag( * 'div', * array(), * array_interleave(" \xC2\xB7 ", $stuff)); * * This function does not preserve keys. * * @param $interleave mixed Element to interleave. * @param $array array List of elements to be interleaved. * * @return array Original list with the new element interleaved. * @group util * * @deprecated */ function array_interleave($interleave, array $array) { return \Packaged\Helpers\Arrays::interleave($interleave, $array); }