如何检查数组中是否存在给定的键或索引?

时间:2015-04-25 12:41:55

标签: php mysql arrays

我已经从mysql数据库创建了一个数据数组。这就是该数组的样子:

// Fetch all the records:
while ($stmt->fetch()) {

    $output  =  "<a>\n";
    $output .=      "<h3>{$product_name}</h3>\n";
    $output .=      "<span class='price'><span class='amount'>BD.{$price}</span></span>\n";
    $output .=  "</a>\n";
    $output .=  "<div class='short_desc'>\n";
    $output .=          "$product_des\n";       
    $output .=  "</div>\n";

    //Add output to array
    $products[] = $output;      
}

因为我想在while循环之外使用这个数组值,这就是我在页面中使用这个$products[]数组的方法。

echo $products[0];
echo $products[1];
echo $products[2];
echo $products[3];

我的问题是,如果此$products[]数组有一个结果集,我可能会收到错误。

  

我的错误信息是这样的:脚本中发生错误   &#39; C:\瓦帕\ WWW \计算机\的index.php&#39;第208行:未定义的偏移量:2

所以我尝试使用array_key_exists()函数来解决这个问题,就像这样对每个echo:

if(!empty($products) && array_key_exists("$products[1]", $products)) echo $products[1]; else echo "No Product";

但我仍然可以得到错误。谁能告诉我这有什么问题?

谢谢。

3 个答案:

答案 0 :(得分:0)

您可能需要以下内容:

if( ! empty($products) ) {
    $ids = array(0, 1, 2, 3, 4, 5);
    foreach ( $ids as $id ) { 
      if ( ! empty($products[$id]) ) echo $products[$id];
    }
} else { 
   echo "No Product";
}

答案 1 :(得分:0)

根据the documentation,函数array_key_exists()具有以下签名:

bool array_key_exists ( mixed $key , array $array )

也就是说:如果boolTRUEFALSE$key,它将返回index15$array中存在array_key_exists(1, $products) 。{/ p>

因此,您所接受的语法是:

empty()

然而,也许更直接的是使用isset()if (!empty($products[0])) echo $products[0]; // ... if (!empty($products[5])) echo $products[5]; ,这两种情况都适用于您的情况:

if (isset($products[0])) echo $products[0];
// ...
if (isset($products[5])) echo $products[5];

或者:

<!-- PRE-HTML -->

<?php if(!empty($products)) foreach((array) $products as $product) { ?>

    <!-- Product-Specific PRE-HTML -->

    <?php echo $product ?>

    <!-- Product-Specific POST-HTML -->

<?php } /* End for loop */ ?>

<!-- POST-HTML -->

也可以做一个循环,包括HTML,并保持理智:

def save_referer
  if cookies[:referer].blank?
    cookies.permanent[:referer] = request.env["HTTP_REFERER"] || 'none'
  end
end

答案 2 :(得分:0)

如果要访问阵列中的单个索引而未收到通知,则必须检查密钥是否存在。

您可以使用isset(http://php.net/manual/de/function.isset.php):

if(isset($products[0]))
{
  echo "yes, the key 0 is set within $products"; 
}

如果要获取阵列中的所有条目,请使用foreach。

foreach($products as $product)
{
 echo $product; 
}