1<?php 2 3/* 4 * This file is part of the Assetic package, an OpenSky project. 5 * 6 * (c) 2010-2014 OpenSky Project Inc 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Assetic\Util; 13 14/** 15 * Variable utilities. 16 * 17 * @author Johannes M. Schmitt <schmittjoh@gmail.com> 18 */ 19abstract class VarUtils 20{ 21 /** 22 * Resolves variable placeholders. 23 * 24 * @param string $template A template string 25 * @param array $vars Variable names 26 * @param array $values Variable values 27 * 28 * @return string The resolved string 29 * 30 * @throws \InvalidArgumentException If there is a variable with no value 31 */ 32 public static function resolve($template, array $vars, array $values) 33 { 34 $map = array(); 35 foreach ($vars as $var) { 36 if (false === strpos($template, '{'.$var.'}')) { 37 continue; 38 } 39 40 if (!isset($values[$var])) { 41 throw new \InvalidArgumentException(sprintf('The template "%s" contains the variable "%s", but was not given any value for it.', $template, $var)); 42 } 43 44 $map['{'.$var.'}'] = $values[$var]; 45 } 46 47 return strtr($template, $map); 48 } 49 50 public static function getCombinations(array $vars, array $values) 51 { 52 if (!$vars) { 53 return array(array()); 54 } 55 56 $combinations = array(); 57 $nbValues = array(); 58 foreach ($values as $var => $vals) { 59 if (!in_array($var, $vars, true)) { 60 continue; 61 } 62 63 $nbValues[$var] = count($vals); 64 } 65 66 for ($i = array_product($nbValues), $c = $i * 2; $i < $c; $i++) { 67 $k = $i; 68 $combination = array(); 69 70 foreach ($vars as $var) { 71 $combination[$var] = $values[$var][$k % $nbValues[$var]]; 72 $k = intval($k / $nbValues[$var]); 73 } 74 75 $combinations[] = $combination; 76 } 77 78 return $combinations; 79 } 80 81 final private function __construct() 82 { 83 } 84} 85