替换字符串后过滤从MySQL检索的数组

时间:2013-07-30 15:26:08

标签: php mysql

我在使用此代码时遇到了很多麻烦,我想知道你们是否可以看一下它,也许看看我做错了什么。

这是我正在尝试做的事情:

我有一个包含两个变量$ buildname和$ author。

的URL

将这两个变量插入到Mysql的查询中以检索唯一的行,然后在该行中获取该行的信息数组。例如,每一行都包含以下信息:

ID,作者,Buildname,Weapon,Mod1,Mod2 .. Mod 8,Polarity 1,Polarity 2 .. Polarity 8,hidden。

然后我想检查每个值,看看它是否等于

之类的字符串

“此插槽中没有mod”

并将其替换为

“”

这样我以后就可以使用array_filter来摆脱数组的那一部分了。

我遇到的问题是以下

  1. 当我获取数组并执行一个回显数组的每个元素的foreach循环时,它是重复的。例如,如果我执行

    foreach($ info_array as $ string) { echo $ string; }

  2. 我得到了结果

    66SteelyDanSteelyDanAcrid BabiesAcrid BabiesAcridAcridNo mod in this slotNo mod in this slotNo mod in this slotNo mod in this slotNo mod in this slotNo mod in this slot

    如果ID为6,则作者为SteelyDan,buildname为Acrid Babies,第一个mod为此插槽中的无模式......依此类推。

    为什么会像这样重复?

    ...继续

    我的代码替换这些值“n”(显示为极性值)和“此插槽中没有mod”(显示为mod值)如下:

    foreach($info_array as &$string)
    {
        if($string == "n")
        {
            str_replace("n","","n");
        }
        if($string == "No mod in this slot")
        {
            str_replace("No mod in this slot","","No mod in this slot");
        } 
    }
    

    然后我会过滤数组以去除任何空值。

    但是,此代码执行不正确。

    如果我在运行循环后回显数组,则所有值都相同。

    我到底做错了什么?这是我的完整代码:

        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 &$string)
    {
        if($string != "")
        {
        $string = convertImageMod($string);
        }
    }
    
    foreach($polarity_array as &$string)
    {
        if($string != "")
        {
        $string = convertImagePolarity($string);
        }
    }
    

    编辑:代码已修复。变量现在是“未设置”但我收到“未定义的索引错误”

    谢谢!

2 个答案:

答案 0 :(得分:1)

为什么不删除数组元素,而不是将空值放入数组然后再使用array_filter,为什么不删除数组元素:

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

答案 1 :(得分:0)

试试这个

foreach($info_array as &$string)
{
    if($string == "n")
    {
        $string = str_replace("n", "", $string);
    }
    if($string == "No mod in this slot")
    {
        $string = str_replace("No mod in this slot", "", $string);
    } 
}

[edit]删除了str_replace中$ string附近的引号,添加了变量赋值,最初删除了太多,并没有注意到这还没有完成。