Mit array_filter() sowie eine Funktion können Sie die minimale positive ganze Zahl ungleich Null sogar, wenn ein Array-Elemente enthält, deren Wert gleich Null ist, wie folgt:
<?php
$arr = array(0, 1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0);
function getMin($a) {
$arr_filtered = array_values(array_filter($a));
return min($arr_filtered);
}
$min = getMin($arr);
$count = count($arr);
while(count(array_unique($arr)) > 1) {
for($i = 0; $i < $count; $i++)
{
if($arr[$i] >= $min){
$arr[$i] -= $min;
echo $arr[$i]." ";
}
}
echo "\n";
}
Siehe demo
Hinweis: Der Code indiziert das gefilterte Array in getMin() mithilfe von array_values () neu.
Solange der Mindestwert eins ist, funktioniert das obige Skript gut. Wenn der Mindestwert jedoch eine andere Zahl ist, muss der Code angepasst werden. Das folgende Skript übernimmt ein mehrdimensionales Array, bestehend aus vier Feldern, die jeweils mit einem unterschiedlichen Minimalwert, eines davon mit negativen Werten:
<?php
error_reporting(E_ALL);
$a = [ [0,1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0],
[0, 2, 3, 4, 0, 5, 6, 4, 3, 2, 0],
[0, 3, 4, 0, 5, 6, 7,8,4, 3, 0],
[-1,0,1,2,3,4,2,1,0,-1]
];
function getMin($a) {
return min($a);
}
foreach ($a as $arr) {
while(($arr != null) ) {
$arr = array_values(array_filter($arr));
if ($arr == null) {
break;
}
$min = getMin($arr);
foreach ($arr as &$e) {
$e -= $min;
}
unset($e);
echo join(" ",$arr),"\n";
}
echo "\n";
}
siehe demo
Note, die zweite Skript filtert explizit die Null Werte in jedem Array, während das erste Skript effektiv tut dies. Der Hauptunterschied zwischen den beiden Skripten besteht darin, dass sich getMin() in der while-Schleife befinden muss, damit die Subtraktion korrekt ausgeführt wird, wenn die minimale Zahl größer als eins ist oder eine negative Zahl ist.
Das Skript vereinfacht den Code auf verschiedene Arten. Viel einfachere Bedingung für die while-Schleife - funktioniert solange das Array nicht null ist. Der Code benötigt nicht mehr getCount(), da ich die Subtraktionsschleife geändert habe, um eine foreach mit einer Referenzvariablen zu verwenden, die anschließend nicht gesetzt ist - wichtig, um Probleme zu vermeiden. Diese foreach-Schleife erfordert auch nicht das if-Bedingungsmerkmal des ersten Skripts.
zeigen Sie uns Ihren Code – webpic
Ignorieren 0 Werte? if ($ var === 0) fortfahren; ? –
siehe hier: http://stackoverflow.com/questions/6748836/min-function-that-ignores-negative-values-in-php –