Fehler bei Array_filter

Halpha

Erfahrenes Mitglied
Hi,

ich hab eine Config funktion die immer ging, nach einer Änderung des Aufrufs läuft sie nun gar nicht mehr.

Der Fehler:

Warning: array_filter() [function.array-filter]: The first argument should be an array in /var/www/xxx/config.php(130) : runtime-created function on line 1

Die Funktion sieht wie folgt aus:

PHP:
	    $sql = '
	    	SELECT
	    		type
	    	FROM
	    		config
	    	WHERE
	    		configId = :id';
	    $PDO = dbcon::getPDO();
	    $stmt = $PDO->prepare($sql);
	    $stmt->bindParam(':id', $id);
	    $stmt->execute();
	    $row = $stmt->fetch();

		if($row[type] == 'array') {
	    	$filter = array_filter($value, create_function('$subarray',  'return (count(array_filter($subarray)) > 0);'));  
	    	$insertValue = serialize($filter);
	    } else {
	    	$insertValue= $value;
	    }

	$sql = '
		UPDATE
			`config`
		SET 
			`value` = :value
		WHERE
			`configId` = :id';
	$PDO = dbcon::getPDO();
	$stmt = $PDO->prepare($sql);
	$stmt->bindParam(':id', $id);
	$stmt->bindParam(':value', $insertValue);
	$stmt->execute();

Ich hab schon einiges probiert, die Id wird schön übergeben und der value ist eindeutig ein Array.

Hoffe jemand hatte den Fehler schonmal;)

Danke schonmal.
 
Ich bezweifel gerade einfach mal das $value ein array ist, weil die Fehlermeldung was anderes sagt ;)
Was kommt denn bei
PHP:
var_dump($value);
raus?
 
@saftmeister
PHP:
public static function updateConfig($id, $value) {

sorry hab den Kopf weggeschnitten;)

@timestamp
Wie gesagt ist ein Array;)

PHP:
Array
(
    [test] => test2
    [test3] => test4
)

ist meine schöne Ausgabe von 

echo '<pre>'.print_r($value, true).'</pre>';

ist ja nix anderes als var_dump:)
 
Zuletzt bearbeitet:
Ah, der Fehler ist in der Lambda-Funktion. Dort hast du auch array_filter drin, aber mit $subarray. Dieses ist aber vllt. noch nicht gesetzt. Ich weiß nicht, was du mit dem Code erreichen willst, aber vllt. solltest du $subarray vorher mal initialisieren und zwar als array.
 
hab jetzt mal $subarray = array(); darüber hingetan, nur das hilft leider nichts.

Das $filter ist ein filter um auch aus Mehrdemensionalen Arrays leere Elemente zu löschen;)
 
Code:
Array
(
    [test] => test2
    [test3] => test4
)
$value ist ein Array. Aber $subarray sind Strings un keine Arrays. Somit übergibst du dem array_filter in der Funktion einen String und keinen Array. Es ist also der array_filter in der Lambda-Funktion.
Die Ausgabe von $value müsste so aussehen damit es funktioniert
Code:
Array
(
    [test] => Array(0=>test2)
    [test3] => Array(0=>test4)
)
 
mein Gott bin ich dämlich, ist ja e klar:( ich sollte da noch ne Abfrage einbauen ob das teil ein mehrdemensionales Array ist oder nicht;)

Yaslaw du bist ein Genie;) wie immer danke sehr.

Liebe Grüße

Michael
 
Zurück