public function testExpandKeys() { $key = 'foo.*.bar'; $size = 2; $keys = Arr::expandKeys($key, $size); $this->assertEquals('foo.0.bar', $keys[0]); $this->assertEquals('foo.1.bar', $keys[1]); $key = 'foo.*.bar.*.beans'; $size = 2; $keys = Arr::expandKeys($key, $size); $this->assertEquals('foo.0.bar.0.beans', $keys[0]); $this->assertEquals('foo.0.bar.1.beans', $keys[1]); $this->assertEquals('foo.1.bar.0.beans', $keys[2]); $this->assertEquals('foo.1.bar.1.beans', $keys[3]); }
/** * Transforms the input array into the output array based on the rules * stated in the configuration file. * * @return array */ public function transform($root = '') { $output = []; $array = Arr::dot($this->feed_data); $rules = Arr::dot($this->rules); $all_rules = []; foreach ($rules as $key => $value) { if (strpos($key, '*')) { $new_keys = Arr::expandKeys($key, $this->expand_size); $new_values = Arr::expandKeys($value, $this->expand_size); $new_rules = array_combine($new_keys, $new_values); foreach ($new_rules as $new_key => $new_rule) { if (array_key_exists($new_rule, $array)) { $all_rules[$new_key] = $new_rule; } } } else { $all_rules[$key] = $value; } } foreach ($all_rules as $k => $v) { Arr::set($output, $k, Arr::get($array, $v)); } return $output; }