.test button:first-child or .test button:nth-child(1)
.test button:nth-child(2)
.test button:nth-child(3)
.test button:last-child or .test button:nth-child(4)
类似于给定数组的所有可能组合 接下来像2_7_8(关键)等...... 基本上是给定数组元素的组合......
答案 0 :(得分:1)
不要认为有办法绕过它......你需要将密钥分开_
并将所有[sf_$k[$i]]
加在$k
所在的位置拆分键和$i
大于0(这样就不会试图获得sf_sf
)
答案 1 :(得分:1)
基本上......你将基础数组$base
添加到结果数组$result
,直到没有任何变化
$base = array( 2 => 1, 7 => 1, 8 => 1, 9 => 2 );
$results = $base;
$changed = true;
while($changed) {
$changed = false;
foreach($results as $id => $sum) {
// which elements are included already?
$contained = explode('_', $id);
foreach($base as $num => $value) {
if(!in_array((string)$num, $contained)) {
// if current is not included, add
$newid = array_merge($contained, [$num]);
sort($newid); // optional, unless name must be sorted
if(!isset($results[implode('_', $newid)])) {
// only add, if we don't already know that new element.
$results[implode('_', $newid)] = $sum + $value;
// set changed to true, so that another pass is made
$changed = true;
}
}
}
}
}
这绝对不是最好或最有效的方法,但它很简单且有效。
如果无需对密钥进行排序,$results[$id.'_'.$num] = $sum + $value
就足够了,而不是$newid
创建,排序和内爆。
<强>更新强>
如果您的基本数组包含n
个元素,则结果中包含2个n
元素的幂。如果n足够大,我的天真实施将需要一些时间。
在这种情况下,更好的解决方案是:
$base = array( 2 => 1, 7 => 1, 8 => 1, 9 => 2 );
$sums = array();
$names = array();
$max = pow(2,count($base));
for($n=1; $n<$max; $n++) {
$sums[$n] = 0;
$names[$n] = '';
foreach(array_keys($base) as $index => $number) {
$sums[$n] += ($n & pow(2,$index)) ? $base[$number] : 0;
$names[$n] .= ($n & pow(2,$index)) ? '_'.$number : '';
}
$names[$n] = substr($names[$n], 1);
}
$result = array_combine($names, $sums);