【问题标题】:How to check if returned value is array before using it?使用前如何检查返回值是否为数组?
【发布时间】:2016-05-24 09:28:30
【问题描述】:

我有这个功能:

//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 的所有消息。现在我需要做的是检查返回的值是否确实是一个数组,因为在查询之后我们可能找不到具有该特定 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>';
}

如果 db 中没有具有该 ID 的 msg,它会返回错误。

【问题讨论】:

  • 你试过用谷歌搜索is_array吗?
  • 谢谢。我不知道那个功能。它刚刚救了我的命。

标签: php mysql arrays mysqli


【解决方案1】:

确保在使用之前初始化$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
}

【讨论】:

    【解决方案2】:

    要查看变量的类型,您可以使用gettype

        print_r(gettype($_COOKIE));
    

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 2021-02-03
      • 2011-05-27
      • 2017-09-17
      • 2023-03-13
      • 2012-12-30
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多