function.array-fark problemleri!

2 Cevap php

Şu anda sitemde bu hatayı alıyorum im:

Warning: array_keys() [function.array-keys]: The first argument should be an array on line 43

Warning: Invalid argument supplied for foreach() on line 44

Warning: array_diff() [function.array-diff]: Argument #1 is not an array on line 47

Warning: array_diff() [function.array-diff]: Argument #1 is not an array on line 48

Ve kaynağıdır:

42.        $tmp = $this->network->get_user_follows($this->user->id);
43.     $tmp    = array_keys($tmp->followers);
44.     foreach($tmp as &$v) { $v = intval($v); }
45.     $tmp2   = array_keys($this->network->get_group_members($g->id));
46.     foreach($tmp2 as &$v) { $v = intval($v); }
47.     $tmp    = array_diff($tmp, $tmp2);
48.     $tmp    = array_diff($tmp, array(intval($this->user->id)));

İşte var_dump çıktı:

bool(false) array(1) { [2]=> int(3) } 

Ben sorunu ve nasıl düzeltebilirim ne olduğunu bilmek istiyorum. Teşekkürler!

2 Cevap

Sizin fonksiyonları diziler iade edilmez. Olduğu için veri ve boş (null veya false) değeri çeşit aksi halde, basit bir döküm çalışabilir varken varsayımına onlar dizilerini geri döndürür:

$tmp    = $this->network->get_user_follows($this->user->id);
$tmp    = isset($tmp->followers) && is_array($tmp->followers) ? array_keys($tmp->followers) : array();
foreach($tmp as &$v) { $v = intval($v); }
$tmp2   = array_keys((array)$this->network->get_group_members($g->id));
foreach($tmp2 as &$v) { $v = intval($v); }
$tmp    = array_diff($tmp, $tmp2);
$tmp    = array_diff($tmp, array(intval($this->user->id)));

Ama daha iyi bir tanı olarak bunu:

var_dump($this->network->get_user_follows($this->user->id), $this->network->get_group_members($g->id));

Bu çok daha net aslında ne oluyor yapmak gerekir

get_user_follows bir dizi dönmek gerekiyordu değil, bu followers adlı bir özelliğe sahip bir nesneyi döndürmek gerekiyordu. Bu bir dizi değil followers mülkiyet, ve $tmp o nesne olması gerektiğini söyledi FALSE zaman çünkü bu aslında.

Kod get_user_follows bazı koşullar altında FALSE return yapıyor bazı koruma maddesi var. Anlamaya ve düzeltmek ;)