Not sure why no one mentioned isset yet, but you could do something like this:
// Before
if(array_key_exists('bla', $array){
    if( !empty($array['bla']) {
// After (if element of array is scalar)
//   Avoids warning and allows for values such as 0
if ((true === isset($array['bla'])) && (mb_strlen($array['bla']) > 0)) {
// After (if element of array is another array
//   Avoids warning and ensures element is populated
if ((true === isset($array['bla'])) && (count($array['bla']) > 0)) {
If you really want to get crazy with a better way of checking vars, you could create a standardized API, below are a few methods I created to avoid laundry list function calls for variable checking:
class MyString
{
    public static function populated($string)
    {
        //-----
        // Handle various datatypes
        //-----
        // Don't want to assume an array as a string, even if we serialize then check
        if (is_array($string)) {
            return false;
        }
        if (is_object($string)) {
            if (!is_callable(array($string, '__toString'))) {
                return false;
            }
            $string = (string) $string;
        }
        //-----
        return (mb_strlen($string) > 0) ? true : false;
    }
}
class MyArray
{
    public static function populatedKey($key, $array, $specificValue = null, $strict = true)
    {
        if ((is_array($array)) &&
            (array_key_exists($key, $array))) {
            if (is_array($array[$key])) {
                return (count($array[$key]) > 0) ? true : false;
            }
            elseif (is_object($array[$key])) {
                return true;
            }
            elseif (mb_strlen($array[$key]) > 0) {
                if (!is_null($specificValue)) {
                    if ($strict === true) {
                        return ($array[$key] === $specificValue) ? true : false;
                    } else {
                        return ($array[$key] == $specificValue) ? true : false;
                    }
                }
                return true;
            }
        }
        return false;
    }
}
// Now you can simplify calls
if (true === MyArray::populatedKey('bla', $array)) { // Do stuff }
if (true === MyString::populated($someString)) { // Do stuff }
There are 1K ways to skin a cat, but standardizing calls like this increase Rapid Application Development (RAD) quite a bit, keeps the calling code clean, and helps with self documentation (semantically logical).