2016-02-13 2 views
2

У меня есть эта функция:Как проверить, является ли возвращаемое значение массивом перед его использованием?

//get mgs by orderID 
function getOrderMsgs($orderId){ 
    global $conn; 
    $query = "SELECT * "; 
    $query .= "FROM msgs "; 
    $query .= "WHERE orderid=" . $orderId . " "; 
    $msgset = mysqli_query($conn, $query); 
    confirm_query($msgset); 
    while ($msg = mysqli_fetch_assoc($msgset)){ 
     $return[] = $msg; 
    } 
    return $return; 
} 

Это возвращает все сообщения с определенным сообщением Id. Теперь мне нужно проверить, действительно ли возвращаемое значение является массивом, поскольку после запроса мы не можем найти сообщений с этим конкретным идентификатором, который, я считаю, не вернет массив. До сих пор это то, что у меня есть:

$msgId = sql_prep($_GET['oid']); 
$order = getOrderById($msgId); 
$msgs=getOrderMsgs($msgId); 
echo '<h2>Order #'.$order['orderid'].': '.$order['title'].'</h2>'; 
echo '<h3>Message thread</h3>'; 
foreach($msgs as $msg){ 
    echo $msg['msg'].'<br>'.$msg['sender'].'<br>'.$msg['timestamp'].'<br><br>'; 
} 

И это возвращает ошибку, если нет сообщ с этим идентификатором в БД.

+3

Вы пробовали поиск в google для 'is_array'? –

+0

Спасибо. Я не знал об этой функции. Это просто спасло мне жизнь. – Khakali

ответ

0

Чтобы увидеть тип переменной, которую вы можете использовать gettype

print_r(gettype($_COOKIE)); 
0

Убедитесь, что вы инициализировать $return перед его использованием. Это гарантирует, что вы всегда возвращаете массив.

function getOrderMsgs($orderId){ 
    global $conn; 
    $return = array(); // initialize variable 

    $query = "SELECT * "; 
    $query .= "FROM msgs "; 
    $query .= "WHERE orderid=" . $orderId . " "; 
    $msgset = mysqli_query($conn, $query); 
    confirm_query($msgset); 
    while ($msg = mysqli_fetch_assoc($msgset)){ 
     $return[] = $msg; 
    } 
    return $return; 
} 

В коде вы можете проверить массив и использовать количество элементов массива, чтобы решить, что делать дальше.

$order = getOrderById($msgId); 
if(count($order) > 0) { 
    // Found something 
} else { 
    // Nothing found 
}