fast eine Lösung:
@shalvah einen guten Ausgangspunkt gab. Jedoch in der vorgeschlagenen Lösung vergaß er über die Elemente des $needle
Array Schleife wie unten dargestellt:
function array_in_array($neearr,$haystack) {
foreach ($neearr as $needle){
foreach ($haystack as $array) {
//check arrays for equality
if(count($needle) == count($array)) {
$needleString = serialize($needle);
$arrayString = serialize($array);
echo "$needleString||$arrayString<br>";
if(strcmp($needleString, $arrayString) == 0) return true;
}
return false;
}
}
}
Aber auch so ist dies nicht vollständig „wasserdicht“. In Fällen, in denen Elemente der „Nadel“ Arrays in einer anderen Reihenfolge (Sequenz) erscheinen die serialze()
-function unterschiedlichen Zeichenfolgen produzieren und zu falschen Negativen führen, wie in der unten stehenden exampe gezeigt:
$hay=array(array('a'=>'car','b'=>'bicycle'),
array('a'=>'bus','b'=>'truck'),
array('a'=>'train','b'=>'coach'));
$nee1=array(array('a'=>'car','b'=>'bicycle'),
array('a'=>'train','b'=>'coach'));
$nee2=array(array('b'=>'bicycle','a'=>'car'), // different order of elements!
array('a'=>'train','b'=>'coach'));
echo array_in_array($nee1,$hay); // true
echo array_in_array($nee2,$hay); // false (but should be true!)
eine leicht bessere Lösung
Dieses Problem kann dadurch gelöst werden, erste Sortieranlage (ksort()
: Sortieren nach Schlüsselwert), um alle Elemente aller „Nadel“ Arrays vor serialize
-Ing sie:
function array_in_array($neearr,$haystack) {
$haystackstrarr = array_map(function($array){ksort($array);return serialize($array);},$haystack);
foreach ($neearr as $needle){
ksort($needle);
$needleString = serialize($needle);
foreach ($haystackstrarr as $arrayString){
if(strcmp($needleString, $arrayString) == 0) return true;
}
return false;
}
}
echo array_in_array($nee1,$hay); // true
echo array_in_array($nee2,$hay); // true
Hat 'Nadel' einen konstanten Schlüsselnamen? – Mohammad
Tut mir leid, ja es tut "child_answers", um genau zu sein –