Es gibt also alle möglichen Kategorien (Array1) und Post-Kategorien (Array2) (es ist eine WordPress-Sache).
Ich versuche, diese Arrays zu vergleichen (aber nicht mit array_diff() Funktion, die mir Elemente Werte statt boolean gab) und das Ergebnis als true/false erhalten. Also möchte ich jeden Wert von Arrays vergleichen und generieren Array-Karte oder vielleicht mit array_combine() Funktion, um ein Array wie folgt zu erhalten:
etc…
Es ist wichtig, dass das Ausgabearray alle Kategorien und ihre Ergebnisse (wahr, falsch) für die Post enthält.
Gibt es eine einfache Möglichkeit, dies zu tun, oder ist es vielleicht eine Funktion, die ich verwenden könnte?
random_user_name
Arrays machen Spaß!
PHP hat eine TONNE von Array-Funktionen, und daher gibt es viele mögliche Lösungen.
Ich habe mir diese als persönliche Herausforderung ausgedacht, die keine Schleifen, Filter oder Karten verwendet.
Diese Lösung verwendet array_intersect um dann Werte zu finden, die in beiden Arrays vorhanden sind array_values zusammen mit array_fill_keys um sie in assoziative Arrays zu verwandeln, mit denen sie gefüllt sind TRUE oder FALSEund schlussendlich array_merge um sie zu einem einzigen Array zusammenzufügen:
$array1 = array( 0 => "car1", 1 => "car2", 2 => "car3", 3 => "car4", 4 => "car5");
$array2 = array( 0 => "car1", 1 => "car4", 2 => "car5" );
// Find all values that exist in both arrays
$intersect = array_intersect( $array1, $array2 );
// Turn it into an associative array with TRUE values
$intersect = array_fill_keys( array_values($intersect), TRUE );
// Turn the original array into an associative array with FALSE values
$array1 = array_fill_keys( array_values( $array1 ), FALSE );
// Merge / combine the arrays - $intersect MUST be second so that TRUE values override FALSE values
$results = array_merge( $array1, $intersect );
Clever! array_fill_keys ist eine Funktion, die ich noch nie verwenden musste.
– Paul Carlton
24. November 2016 um 0:44 Uhr
Paul Carlton
array_map oder array_combine gibt nicht wirklich zurück, was Sie wollen. Wenn Sie verwenden möchten array_map Um den gewünschten Effekt zu erzielen, ohne eine Foreach-Schleife zu schreiben, erhalten Sie unten das gewünschte Ergebnis. Beachten Sie, dass Sie bestehen müssen array3 Als Referenz.
Dies ist langsam, aber es sollte tun, was Sie wollen, und leicht zu verstehen sein.
// Loop over the outer array which we're told has all the categories
$result = array();
foreach($array1 as $sCar1) {
$found = false;
// Loop over the categories of the post
foreach($array2 as $sCar2) {
// If the current post category matches
// the current category we're searching for
// note it and move on
if($sCar2 == $sCar1) {
$found = true;
break;
}
}
// Now indicate in the result if the post has the current category
$result[$sCar1] = $found;
}
Im Grunde führen wir also zwei Arrays zusammen und zählen dann das Vorkommen von Werten. Dann, wenn ein Zählwert nicht gleich 1 ist, ordnen wir den Wert zu trueund ansonsten – false. Interessant, das Dies funktioniert unabhängig davon, welches Array kürzer ist.
Beachten Sie, dass array_count_values Funktion wirft E_WARNING für jedes Element, das kein String oder Integer ist. Dieser Ansatz funktioniert also nur bei Arrays aus Strings und Ganzzahlen.
Dieser Ansatz kann auch fehlschlagen, wenn Ihre Array-Elemente nicht eindeutig sind. Für diese Situation müssen Sie sich bewerben array_unique zu jedem Array vorher.
13838700cookie-checkWie gibt man ein Array mit True/False-Werten zurück, wenn man 2 Arrays vergleicht?yes