in_array findet die Datensätze nicht

EddieG

Erfahrenes Mitglied
hi,
ich möchte ein mehrdimensionales Array zusammenbauen, ist ein Datensatz schon vorhanden möchte ich nicht das dieser erneut eingetragen wird. Ich habe mich hierfür an dem Manual von php.net Orientiert
PHP:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Mein Code
PHP:
foreach($values as $k=>$val)                {                                                            if(in_array($val['uid_f'],$arrData))                    {
echo "schon da";                    }
else{                        
$arrData[]['uid_f']  = $val['uid_f'];                    }                    
echo "<pre>";                    
var_dump($val);                    
echo "</pre>";                                    
}
Theoretisch sollte doch sofern ein wert bereits vorhanden ist die Nachricht "schon da" erscheinen, oder nicht?

Nach dem Durchlauf der Schleife sieht das ganze so aus
Code:
array(6) {
  [0]=>  array(1) {    
["uid_f"]=>    string(2) "89"  }  
[1]=>  array(1) {    ["uid_f"]=>    string(2) "53"  }  
[2]=>  array(1) {    ["uid_f"]=>    string(3) "110"  }  
[3]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }  
[4]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }  
[5]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }}
Das ziel ist es am ende nach uid_f eine weitere ebene einzufügen mit "uid_l" Die Struktur wäre am ende also diese
Code:
array(6) {
  [0]=>  array(1) {    ["uid_f"]=>    string(2) "89"
     [0]=>      array(1) {       ["uid_l"]=>        string(2) "12"       }
     [1]=>      array(1) {       ["uid_l"]=>        string(2) "13"       }...
Den wert für uid_l habe ich jedoch noch gar nicht erst versucht zu setzen, da ja zurzeit noch nicht die redundanten uid_f werte ausgesiebt werden.
 
Zuletzt bearbeitet:
$arrData[]['uid_f'] = $val['uid_f'];

ersetzen mit

$arrData[]['uid_f'][] = $val['uid_f'];

wen ichs richtig verstanden habe.
 
nein so setzt er mir den wert von uid_f nur in eine tiefere Ebene.
Wie gesgat mit dem in_array möchte ich eben die momentane Ausgabe die Falsch ist.
Code:
array(6) {
  [0]=>  array(1) {    
["uid_f"]=>    string(2) "89"  }  
[1]=>  array(1) {    ["uid_f"]=>    string(2) "53"  }  
[2]=>  array(1) {    ["uid_f"]=>    string(3) "110"  }  
[3]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }  
[4]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }  
[5]=>  array(1) {    ["uid_f"]=>    string(2) "89"  }}
unter Berücksichtigung der if-Abfrage so ausgegeben bekommen

Code:
array(6) {
  [0]=>  array(1) {    
["uid_f"]=>    string(2) "89"  }  
[1]=>  array(1) {    ["uid_f"]=>    string(2) "53"  }  
[2]=>  array(1) {    ["uid_f"]=>    string(3) "110"  }  
}
Schon da
Schon da
Schon da
Am besten wäre natürlich wenn man nur alle werte mit dem Schlüssel 'uid_f'] nach diesem wert überprüft.

Ich habe mir nun eine Hilfsfunktion überlegt die das übernimmt, jedoch zeigt das auch keinerlei Auswirkung
PHP:
         $arrData;
                     
            foreach($this->r as $key=>$values)
            {
                foreach($values as $k=>$val)
                {
                    
                    
                    
                    if($this->searchInArray('uid_foreign', $arrData,$val['uid_foreign']))
                    {
                        
                    }else{
                        $arrData[]['uid_foreign']  = $val['uid_foreign'];
                    }
                    
                    
                }
            }
            
            echo "<pre>";
            var_dump(($arrData));
          echo"</pre>";
        }
        function searchInArray($key,$arr,$needle)
        {
            $bool;
            foreach($arr as $k=>$value)
            {
                if($key==$k)
                {
                   
                    if($value==$needle)
                    {
                        $bool=true;
                      
                    }else{
                       $bool=false;
                    }
                    continue;
                }
            }
            return $bool;
        }

Ok hatte eine Schleife zu viel ;)
 
Zuletzt bearbeitet:
Zurück