Aktueller Standort: Startseite> Neueste Artikel> Wie passen Sie die Funktionsvergleichsfunktion des Schlüsselnamens an und wenden Sie sie an array_intersect_ukey an? Fähigkeiten teilen

Wie passen Sie die Funktionsvergleichsfunktion des Schlüsselnamens an und wenden Sie sie an array_intersect_ukey an? Fähigkeiten teilen

gitbox 2025-06-24

In PHP verwenden wir häufig verschiedene Array -Funktionen, um Daten zu verarbeiten, insbesondere für Array_intersect_Ukey () , mit denen die Schlüsselnamen von zwei oder mehr Arrays verglichen und Elemente mit denselben Schlüsselnamen zwischen ihnen zurückgegeben werden. Diese Funktion ist sehr bequem zu verwenden. Wenn wir jedoch eine benutzerdefinierte Vergleichsmethode verwenden möchten, um festzustellen, ob die Schlüsselnamen gleich sind, wird die Funktion array_intersect_ukey () etwas eingeschränkt. Daher wird die Anpassung der Funktionsvergleichsfunktion des Schlüsselnamens an Array_intersect_Ukey () unsere Array -Verarbeitungsfunktionen erheblich verbessern.

1. Grundnutzung von array_intersect_ukey ()

Erstens ist es sehr wichtig, die grundlegende Verwendung von Array_intersect_Ukey () zu verstehen. Die Syntax dieser Funktion lautet wie folgt:

 <span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$key_compare_func</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1 und $ array2 : Zwei Arrays zu vergleichen.

  • $ key_compare_func : Eine Rückruffunktion, die zwei Schlüsselnamen vergleicht. Wenn der Rückgabewert weniger als 0 beträgt, ist der erste Schlüssel kleiner als der zweite Schlüssel. Wenn der Rückgabewert größer als 0 ist, ist der erste Schlüssel größer als der zweite Schlüssel. Wenn 0 zurückgegeben wird, sind die beiden Schlüssel gleich.

Der folgende Code zeigt beispielsweise die allgemeine Verwendung von Array_intersect_Ukey () :

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">'strcasecmp'</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [b] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [c] =&gt; </span><span><span class="hljs-number">3</span></span><span>
)
</span></span>

In diesem Beispiel wird StrCaseCMP als Rückruffunktion verwendet, die den Fallvergleich von Schlüsselnamen ignoriert und schließlich Elemente mit denselben Schlüsselnamen in den beiden Arrays zurückgibt.

2. Vergleichsfunktion für benutzerdefinierte Schlüsselname

In praktischen Anwendungen müssen wir häufig eine komplexere Vergleichsfunktion entsprechend unseren Bedürfnissen entwerfen. Mit PHP können wir eine benutzerdefinierte Vergleichsfunktion übergeben, damit wir die Vergleichslogik fein steuern können.

Wenn wir beispielsweise die Schlüsselnamen eines Arrays vergleichen möchten, berücksichtigt wir nicht nur den Buchstaben, sondern auch die Priorität von Sonderzeichen, können wir eine Funktion anpassen, um dies zu erreichen:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">custom_key_compare</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>) {
    </span><span><span class="hljs-comment">// Benutzerdefinierte Vergleichslogik:Wenn der Schlüsselname Sonderzeichen enthält,Höhere Priorität</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key2</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;  </span><span><span class="hljs-comment">// $key1 Priorität</span></span><span>
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key2</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-string">'@'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">1</span></span><span>;   </span><span><span class="hljs-comment">// $key2 Priorität</span></span><span>
    }
    
    </span><span><span class="hljs-comment">// Vergleiche in alphabetischer Reihenfolge standardmäßig</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>);
}
</span></span>

In diesem Beispiel bestimmt die Funktion custom_key_compare () zuerst, ob der Schlüsselname das @ -Symbol enthält. Wenn einer enthält und der andere nicht, hat der Schlüsselname @ Vorrang. Andernfalls wird es alphabetisch verglichen.

3. Anwenden Sie die benutzerdefinierte Vergleichsfunktion auf Array_intersect_Ukey () an

Als nächstes können wir die Funktion custom_key_compare () auf array_intersect_ukey () anwenden, um den Schlüsselnamenvergleich durchzuführen. Angenommen, wir haben die folgenden zwei Arrays:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b@'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">6</span></span><span>, </span><span><span class="hljs-string">'b@'</span></span><span> =&gt; </span><span><span class="hljs-number">7</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">'custom_key_compare'</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [b@] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

Wie Sie sehen können, erkennt Array_intersect_ukey () den Schlüsselnamen B@ erfolgreich gemäß unserer benutzerdefinierten Tastaturnamenvergleichsfunktion, während sie B ignoriert, auch wenn sie im Array den gleichen Wert haben.

4. Praktische Anwendung

Durch die Anpassung der Vergleichsfunktion des Schlüsselnamens können wir viele komplexe Szenarien flexibel verarbeiten. Wenn wir beispielsweise den Fall ignorieren möchten, wenn wir an Dateipfaden arbeiten, oder die Slash -Anweisungen (vorwärts slash / und backslash \ ) im Pfad in ein Format vereinen, kann array_intersect_ukey () auch basierend auf benutzerdefinierten Regeln verglichen werden.

Angenommen, wir haben das folgende Dateipfadarray:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">'src/main.php'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'src/config/config.php'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">'SRC/main.php'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'src/config/config.php'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];
</span></span>

Wir möchten den Fall ignorieren und die Schrägstrich -Richtung im Pfad vereinen. Wir können die Vergleichsfunktion wie folgt anpassen:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">path_compare</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>) {
    </span><span><span class="hljs-comment">// Konvertieren Sie Pfade, um Schrägstriche weiterzuleiten und den Fall zu ignorieren</span></span><span>
    </span><span><span class="hljs-variable">$key1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">'\\'</span></span><span>, </span><span><span class="hljs-string">'/'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>));
    </span><span><span class="hljs-variable">$key2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">'\\'</span></span><span>, </span><span><span class="hljs-string">'/'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$key2</span></span><span>));
    
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>);
}

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">'path_compare'</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [src/config/config.php] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

Durch benutzerdefinierte Vergleichsfunktionen haben wir den Unterschied im Pfadfall und die Slash -Richtung erfolgreich ignoriert und das richtige Ergebnis erzielt.

5. Zusammenfassung

Durch die Funktion array_intersect_ukey () kombiniert mit der Vergleichsfunktion "benutzerdefinierte Schlüsselname" bietet PHP eine flexible und effiziente Möglichkeit, den Vergleich von Schlüsselnamen in einem Array zu verarbeiten. Unabhängig davon, ob es sich um einen einfachen alphabetischen Vergleich oder ein komplexes Beurteilung von Sonderregeln handelt, kann es durch benutzerdefinierte Vergleichsfunktionen erzielt werden. Dies bietet uns leistungsstarke Tools bei der Verarbeitung komplexer Daten, die uns helfen können, das Verhalten von Array -Operationen genauer zu steuern.