Heim  >  Fragen und Antworten  >  Hauptteil

Wie konstruiere ich einen Ausdruck mit vielen Variablen mit demselben Namensmuster?

Ich habe 50 Variablen in meinem Systemskript. Alle haben das gleiche Namensschema, zum Beispiel:

$case_un
$case_deux
$case_trois
...
$case_fourthy

Ich muss einen Ausdruck mit all diesen Variablen erstellen, ohne 50 Variablennamen codieren zu müssen!

Da alle meine Variablennamen mit dem Muster „case_“ beginnen, gibt es eine Syntax, um sie zu summieren, oder einen anderen Ausdruck?

Ich muss so etwas ausführen:

$test_of_cases = $case_un && $case_deux && $case_trois && ...........$case_fourthy ;

Und das Ding:

$total_of_sums = $sum_un + $sum_deux + ............$sum_fifthy ;

Gibt es also eine Möglichkeit, in PHP zu programmieren? In der formalen Sprache muss ich nur alle Variablen summieren, deren Namen mit „case_“ beginnen.

Meine 50 Variablen können nicht in einem Array gespeichert werden, da sie aus unterschiedlichen Quellen und Ausdrucksergebnissen stammen.

Ich bin mir nicht sicher, aber ich denke, dass es dafür in anderen Sprachen einen Ausdruck gibt:

LET a=SUM (`*case_*`)
    LET b=XOR (`*case_*`)
    LET c=AND (`*case_*`)

Das habe ich vor 30 Jahren im Studium gelernt...

Ich wünschte, PHP könnte das auch, sonst müsste ich 50 Zeilen Code schreiben!

Mit freundlichen Grüßen

P粉310931198P粉310931198372 Tage vor767

Antworte allen(1)Ich werde antworten

  • P粉956441054

    P粉9564410542023-09-17 00:10:34

    假设你有一个这样的数组

    $arr = [
        'people_physic_eyes' => 1,
        'people_physic_weight' => 2,
        ...
        'name' => 'james',
        'age' => 15,
        ...
    ];

    您想要对键名以“people_physical_”开头的所有值求和,有很多方法可以实现这一点,这里是一个使用 array_reduce:

    $sum = array_reduce(
        array_keys($arr),
        function ($sum, $key) use ($arr) {
            # if the key starts with 'people_physic_', sum up the value
            return strpos($key, 'people_physic_') === 0 ? $sum + $arr[$key] : $sum;
        },
        0
    );

    但这效率不高,因为您必须在每次调用时比较所有键。

    Antwort
    0
  • StornierenAntwort