PHP代码:简单干净的编码方式



我有一个代码,显示等于0的变量:

$a = 1;
$b = -1;
$c = 2;
if($a + $b + $c == 0){
echo "a,b & c n";   
}
if($a + $b == 0){
echo "a & b n";   
}
if($a + $c == 0){
echo "a & c n";   
}
if($c + $b == 0){
echo "c & b n";   
}

这将导致:

a & b

当我更改值时:

$a = -1;
$b = 0.5;
$c = 0.5;

这将导致:

A,B&C

有没有任何干净易用的功能方法来在 PHP 中编写此功能?

如果你可以更改输入到(关联(数组,你可以利用array_sum和"在 PHP 中查找数组的子集"(更具体:Walf 的答案(中的函数来自动确定可能的组合:

function power_set($array) {
$results = [[]];
foreach ($array as $key => $value) {
foreach ($results as $combination) {
$results[] = $combination + [$key => $value];
}
}
// Remove the first empty set
array_shift($results);
// Sort descending by amount of elements
$order = array_map('count', $results);
uksort($results, function($key_a, $key_b) use ($order) {
$comp = $order[$key_b] - $order[$key_a];
if ($comp == 0) {
$comp = $key_a - $key_b;
}
return $comp;
});
return array_values($results);
}
function zero_sums($inputs) {
$subsets = power_set($inputs);
foreach ($subsets as $subset) {
if (array_sum($subset) == 0) {
echo implode(" & ", array_keys($subset)).PHP_EOL;
}
}
}

示例输出:

zero_sums(["a" => 1, "b" => -1, "c" => 2]);
// Prints "a & b"
zero_sums(["a" => -0.5, "b" => -0.5, "c" => 1]);
// Prints "a & b & c"
zero_sums(["a" => 1, "b" => -1, "c" => 2, "d" => -1]);
// Prints "b & c & d" / "a & b" / "a & d"
zero_sums(["a" => -1, "b" => -1, "c" => 2, "d" => 1, "e" => -1]);
// Prints "a & b & c & d & e" / "a & b & c" / "a & c & e" / "b & c & e" / "a & d" / "b & d" / "d & e"

你可以用这种方式处理

$a = ['a' => -1, 'b' => 0.5, 'c' =>0.5];
//Combinations
$c = [
['a','b','c'],
['a','b'],
['a','c'],
['b','c']
];
foreach($c as $v){
$s = array_sum(array_intersect_key($a,array_flip($v)));
echo !$s ? (implode(' & ',$v)) : '';
}

工作示例:https://3v4l.org/H0If0

最新更新