Array Werte prüfen ob diese einen Inhalt haben

Halpha

Erfahrenes Mitglied
Hallo,

also ich schreib mir gerade eine Config in der eine email Adresse und der Name dazu angegeben werden soll.

Das ganze funktioniert jetzt auch ganz gut.

Nur da darunter eine Eingabefeld für neue Email Adressen und Namen steht, wird jedes mal zu dem Array ein Leere Wert hinzugefügt, da das ganze durch eine Update Funktion läuft.

Jetzt möchte ich eigentlich nur prüfen ob ein Wert im Array leer ist. das ganze hab ich jetzt auf 20 Arten probiert nur keine mag mich.

PHP:
	public static function updateConfig($type, $id, $value) {
	    if($type = 'array') {
	    	for($x = 0;$x<count($value);$x++) {
	    		if(empty($value[$x])) {
	    			unset($value[$x]);
	    		}
	    	}
	    $insertValue= serialize($value);
	    }
	    else {
	    	$insertValue= $value;
	    }

das war mein letzter Versuch, der müsste eigentlich auch klappen. Mein erster Versuch dachte ich müsste auch passen nur keiner von beiden geht..

1. Versuch:

PHP:
	    if($type = 'array') {
			foreach($value as $key => $val)
				{
					if(empty($val)) {
						unset($value[$key]);
					}
					else {
						$insertValue = serialize($value);
					}
				}
	    }
	    else {
	    	$insertValue= $value;
	    }

Ich wär so froh über eine Antwort könnt ihr euch nicht vorstellen;)

Danke schonmal
 
danke für die schnelle Antwort, ja das hab ich mit meinem Kopfweh vergessen zu erwähnen.

Ich hab bei meinem 1. Versuch nur immer das Problem dass er mir absolut nicht empty($val) schluckt und ich weiß nicht wieso.

Hab jetzt deins mal ausprobiert:
PHP:
	    if($type = 'array') {
	    	$filter = array_filter($value);
	    	$insertValue = serialize($filter);
	    }
	    else {
	    	$insertValue= $value;
	    }

Das ganze liefert mir jetzt das gleiche Ergebnis. Die werte bleiben einfach so. Die leeren Interessieren den nichtmal;)
 
sieht alles so ca aus laut meinem print_r:
PHP:
Array
(
    [1] => Array
        (
            [0] => asdf
            [1] => asfd
        )

    [2] => Array
        (
            [0] => asfd
            [1] => fsda
        )

    [3] => Array
        (
            [0] => 
            [1] => 
        )

    [4] => Array
        (
            [0] => 
            [1] => 
        )

    [5] => Array
        (
            [0] => 
            [1] => 
        )

hier var_dum()

array(12) { [1]=> array(2) { [0]=> string(4) "asdf" [1]=> string(4) "asfd" } [2]=> array(2) { [0]=> string(4) "asfd" [1]=> string(4) "fsda" } [3]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [4]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [5]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [6]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [7]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [8]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [9]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [10]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [11]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [12]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } }
 
Dei Einträge sind auch nicht leer, sondern Arrays mir 2 leeren Einträgen. Du musst tiefer suchen.

Angenommen du willst alle Unterarrays entfernen die nur leere Eiträge beinhalten, dann könnte das etwa so aussehen:
PHP:
//Testfall erstellen
$array[] = array("asdf", "asfd");
$array[] = array("", "");
$array[] = array("asdf", "asfd");

//Array-Filter mit der Callback-Funtion myFilter ausführen
$newArray = array_filter($array, 'myFilter');

var_dump($newArray);

/**
 * Callback-Funktion um Unterarrays die nur leere Inhalte haben auszufiltern
 * @param $subarray
 */
function myFilter($subarray){
    //prüfen ob der Array nur leere Einträge beinhaltet
    return  (count(array_filter($subarray)) > 0);
}
 
tut mir leid irgendwie check ich die logik hinter deinem Script nicht.

Meinen Fehler hab ich kapiert, ich held hab versucht ein Mehrdemensionales Array zu prüfen und zuzuschneiden obwohl nur ein Subarray leer ist.

Nur wie dein Script jetzt Funktioniert kapier ich nicht.
$newArray bastelt das neue Array zusammen das ich dann updaten kann. Nur bei mir gibt das jedes mal via var_dump NULL aus.

wo genau wird denn die Variable $subarray definiert?

Tut mir leid, ich glaub ich steh heute auf einer Leitung;)
 
mach dich mal über die Funktion array_filter() schlau

dies filtert jeden Wert eines Arrays mittels der angegeben Funktion. Duer Übergabe-Paramter $subarray der myFunktion() ist also ein Element des zu filternden Arrays, in deinem Fall eben ein Array der 2ten Stufe.

$array entspricht bei dir etwa dem $value
 
ok hab ich mir mal durchgelesen und auch Kapiert. Mein Problem ist jetzt egal was ich mache die Callback Funktion wird nicht aufgerufen:
hier die Fehlermeldung und der Code der ganzen Funktion
PHP:
Warning: array_filter() [function.array-filter]: The second argument, 'myFilter', should be a valid callback in /var/www/virtual/abc/htdocs/core/class/config.php on line 126

	public static function updateConfig($type, $id, $value) {
		//echo '<pre>'.var_dump($value).'</pre>';
		//echo '<pre>'.print_r($value, true).'</pre>';
	    if($type = 'array') {
	    	$insertValue = array_filter($value, 'myFilter');
	    	var_dump($insertValue);
	    }
	    else {
	    	$insertValue= $value;
	    }

	    
	$sql = '
		UPDATE
			`rubic_config`
		SET 
			`value` = :value
		WHERE
			`configId` = :id';
	$PDO = dbcon::getPDO();
	$stmt = $PDO->prepare($sql);
	$stmt->bindParam(':id', $id);
	$stmt->bindParam(':value', $insertValue);
	$stmt->execute();
   	}
	function myFilter($subarray) {
	    return (count(array_filter($subarray)) > 0);
	}
 
Hi,

nur eine kurze Frage am Rande: Willst Du in Deiner if-Abfrage wirklich $type den Wert 'array' zuordnen? Ansonsten sollte es heißen if($type == 'array').
Wenn's um die Zuweisung eines Standardwertes geht, kannst Du das bereits in der Parameterliste machen: updateConfig($type='array', $id, $value)

Greetz
cw
 
Zurück