2013-07-30 52 views
-1

我认为这是一个相对简单的问题来回答。这是我想要做的基本布局。回显空数组值返回“未定义索引”错误

我有一个数组的数组

$polarity_array 

值是其中显示图像的HTML标签。

但这些阵列的一些值是空的,因为我执行该取消设置等于“在该时隙无MOD”任何数组值(在一个形式的下拉框选择时,他们提交的东西)

我的函数然后有一个定界符,呼应它包含这些阵列像这样的价值观我的HTML页面:

{$polarity_array['image_polarity1']} 
{$polarity_array['image_polarity2']} 
{$polarity_array['image_polarity3']} 
{$polarity_array['image_polarity4']} 
{$polarity_array['image_polarity5']} 
{$polarity_array['image_polarity6']} 
{$polarity_array['image_polarity7']} 
{$polarity_array['image_polarity8']} 

但是,由于一些没有设置值(和非设定值取决于用户最初提交的),我得到“未定义索引”错误。

有没有更好的方法来做到这一点?

<?php 

include_once 'header.php'; 
require_once 'login_builds.php'; 
include_once 'functions.php'; 

//Connect to server 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

//Select the database for build-related pages 

mysql_select_db($db_database) 
    or die("Unable to select database: " . mysql_error()); 

//Retrieve page variables from GET array for inital querying, decode them 

$buildname = $_GET['buildname']; 
$author = $_GET['author']; 
$pageitem = sanitizeString(urldecode($buildname)); 
$pageauthor = sanitizeString(urldecode($author)); 

//Set variables for array query and object image retrieval 

$query_info = "SELECT * FROM weapons WHERE buildname='$pageitem' AND author='$pageauthor'"; 

$info_result = mysql_query($query_info); 
$info_array = mysql_fetch_array($info_result); 

//Remove entries with no mod, and no polarity 
/* 
foreach($info_array as $key => $string) 
{ 
    if($string == "n" || $string == "No mod in this slot") 
    { 
     unset($info_array[$key]); 
    } 
} 
*/ 

$page_id = $info_array['id']; 
$page_author = $info_array['author']; 
$page_buildname = $info_array['buildname']; 
$page_weapon = $info_array['weapon']; 
$page_mod1 = $info_array['mod1']; 
$page_mod2 = $info_array['mod2']; 
$page_mod3 = $info_array['mod3']; 
$page_mod4 = $info_array['mod4']; 
$page_mod5 = $info_array['mod5']; 
$page_mod6 = $info_array['mod6']; 
$page_mod7 = $info_array['mod7']; 
$page_mod8 = $info_array['mod8']; 
$page_polarity1 = $info_array['polarity1']; 
$page_polarity2 = $info_array['polarity2']; 
$page_polarity3 = $info_array['polarity3']; 
$page_polarity4 = $info_array['polarity4']; 
$page_polarity5 = $info_array['polarity5']; 
$page_polarity6 = $info_array['polarity6']; 
$page_polarity7 = $info_array['polarity7']; 
$page_polarity8 = $info_array['polarity8']; 
$page_category = $info_array['category']; 
$page_description = $info_array['description']; 
$page_date = $info_array['date']; 
$page_hidden = $info_array['hidden']; 

//Check if the accessing user is the same as the page creator. If not, check if page is hidden. If page is hidden, redirect to index.php. 

if($_SESSION['username'] != $page_author) 
{ 
    if($page_hidden == y) 
    { 
    header("Location: index.php"); 
    } 
} 

//Retrieve Page Main Image 

$page_main_image = convertImageMainPageWeapon($page_weapon); 

//Set up mod and polarity associative arrays 


$mod_array = array(

"image_mod1" =>  "$page_mod1", 
"image_mod2" =>  "$page_mod2", 
"image_mod3" =>  "$page_mod3", 
"image_mod4" =>  "$page_mod4", 
"image_mod5" =>  "$page_mod5", 
"image_mod6" =>  "$page_mod6", 
"image_mod7" =>  "$page_mod7", 
"image_mod8" =>  "$page_mod8" 

); 

$polarity_array = array(

"image_polarity1" => "$page_polarity1", 
"image_polarity2" => "$page_polarity2", 
"image_polarity3" => "$page_polarity3", 
"image_polarity4" => "$page_polarity4", 
"image_polarity5" => "$page_polarity5", 
"image_polarity6" => "$page_polarity6", 
"image_polarity7" => "$page_polarity7", 
"image_polarity8" => "$page_polarity8" 

); 

foreach($mod_array as $key => $string) 
{ 
    if($string == "No mod in this slot") 
    { 
     unset($mod_array[$key]); 
    } 
} 

foreach($polarity_array as $key => $string) 
{ 
    if($string == "n") 
    { 
     unset($polarity_array[$key]); 
    } 
} 

foreach($mod_array as &$string) 
{ 
    if($string != "") 
    { 
    $string = convertImageMod($string); 
    } 
} 

foreach($polarity_array as &$string) 
{ 
    if($string != "") 
    { 
    $string = convertImagePolarity($string); 
    } 
} 



echo<<<_END 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="en-us" http-equiv="Content-Language" /> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Weapon Build Creator</title> 

<link href="styles/main.css" rel="stylesheet" type="text/css" /> 

</head> 

<body style="background-image: url('images/bg.jpg')"> 

<div id="form" style="form"> 
<div class="newsdiv"> 
    <br /> 
    <p class="title">$page_buildname <br /> 
    (ID: $page_id)</p> 
    <p class="regular_text">Author: $page_author<br /> 
    Weapon: $page_weapon</p> 
    <img class="center_image" src="$page_main_image"></img><br /> 
    <p class="mod_text"> MODS AND POLARITIES</p> 
    <p class="regular_text"></p> 

<?php 

    for($i=1; $i<=8; $i++) { 
    if(isset($polarity_array['image_polarity' . $i])) { 
     echo $polarity_array['image_polarity' . $i]; 
    } else { 
     echo "This slot is empty."; 
    } 
} 

?> 

    <p class="regular_text"> Description:</p> 
    <div class="description_text_div"> &nbsp;$page_description<br /> 
     <br /> 
     <br /> 
     <br /> 
     <br /> 
     <br /> 
     <br /> 
     <br /> 
     <br /> 
    </div> 
    <p class="regular_text">*comment section currently disabled for beta testing*</p> 
    </div> 
    <form action = "authenticate.php" class="regular_text" method="post"> 
     <div class="auto-style1"> 
      <p class="warning_text"> 
      <br /> 
     <br /></p> 
     </div> 
    </form> 
</div> 
</div> 
</body> 

</html> 

_END; 

?> 

回答

2

,您必须检查索引是否存在这样的:

if(isset($polarity_array['image_polarity1'])) { 
    echo $polarity_array['image_polarity1']; 
} else { 
    echo "This slot is empty."; 
} 

我不知道你的榜样那些大括号的意思是,虽然。

更妙的是,使用数组来遍历项目:

for($i=1; $i<=8; $i++) { 
    if(isset($polarity_array['image_polarity' . $i])) { 
     echo $polarity_array['image_polarity' . $i]; 
    } else { 
     echo "This slot is empty."; 
    } 
} 
+0

将这些命令通过定界符结构包围我的HTML文档中运行?或者我必须分别发出每个命令 – SteelyDan

+0

它不会在你的heredoc中工作。用'$ polarity_array ['image_polarity1'] = $ polarity_array ['image_polarity1']'和空值'$ polarity_array ['image_polarity1'] ='此插槽为空'取代回声;'因此您需要写9条件 – DeiForm

+0

检查我的第二个例子,它循环遍历项目。这是PHP代码,所以你必须使用:<?PHP这里的代码>?一些HTML ... ..other HTML HTML – MightyPork

0

由于您取消设置$key$array可以使用foreach()仅显示目前存在的关键。起初,我正在考虑使用@MightyPork建议的for语句,但您必须知道元素的总数。这样你只能使用现有的元素。

foreach($polarity_array as $key=>$value){ 
    echo $key."=".$value."<br>"; 
} 
+0

这很好,如果他只想要现有的,尽管我认为他想要所有这些,但是一个消息“这个槽中没有mod”,其中的键未定义。至少这是我对这个问题的理解。 – MightyPork

+0

@MightPork OP的示例中已经有代码,表示“此插槽中没有mod”。如果使用'unset()',他们基本上可以为自己创造更多的工作。我投票决定关闭它,因为它从“有什么问题”转到“修复我的代码转储”。 –

0

对数组元素调用unset()会将其删除,从而更改数组的长度。这就是为什么你会收到“定义不清的索引”错误。

PHP Arrays Manual

unset($arr[5]); // This removes the element from the array

+0

它们是关联数组 – SteelyDan

+0

'unset()'仍然删除元素,不是? – 2013-07-30 18:00:21

+0

是的,但由于它是联想,它不会查找数组值,而是查找关联的键 key1 =>值 它查找key1,返回值。它不寻找第一行。 – SteelyDan