操纵多阵列

时间:2011-08-05 13:56:03

标签: php multidimensional-array

我通过以下方式从mysql表中提取一些数据:

$result = mysql_query("SELECT characters_ID, name, borndate, deathdate, marrieddate, ispregnant FROM characters WHERE isfemale='1'",$db);
$femaledata = array();

while ($row_user = mysql_fetch_assoc($result))
$femaledata[] = $row_user;

这给了我一个如下所示的数组:

Array ( 
    [0] => Array ( [characters_ID] => 2 [name] => Helene [borndate] => 35 [deathdate] => 431 [marrieddate] => 157 [ispregnant] => 0 ) 
    [1] => Array ( [characters_ID] => 4 [name] => Isabelle [borndate] => 161 [deathdate] => [marrieddate] => 303 [ispregnant] => 1 ) 
    [2] => Array ( [characters_ID] => 7 [name] => Helene [borndate] => 326 [deathdate] => [marrieddate] => [ispregnant] => 0 ) 
    [3] => Array ( [characters_ID] => 72 [name] => Faylinn [borndate] => 335 [deathdate] => [marrieddate] => [ispregnant] => 0 ) 
    [4] => Array ( [characters_ID] => 74 [name] => Relina [borndate] => 349 [deathdate] => [marrieddate] => [ispregnant] => 0 ) 
    )

现在我需要删除任何具有deathdate或ispregnant值的字符,然后我需要在其他字符上运行一些代码。例如,我需要获取borndate值,将其与当前日期进行比较以查找年龄,并且部分基于年龄,我需要为每个人运行代码以确定角色是否在转弯时怀孕了。

道歉,这似乎是一个长期存在的问题。多维数组似乎让我感到困惑。

编辑:(问题需要更清楚)

你能否建议我爆炸或分解数组的最佳方法,然后对数据进行条件修改,或者我如何删除不需要的数据,然后对数据进行条件修改。

我在这里的最终成果是选择合适的女性角色(已经死亡或怀孕),并根据他们的年龄,让他们有机会怀孕。如果为true,我会在SQL数据库中抛出一些代码来更新该字符。

谢谢!

4 个答案:

答案 0 :(得分:2)

您需要的所有东西都可以通过SQL完成:

  

现在我需要删除任何具有deathdate或者值的字符   ispregnant

只需在WHERE条件中添加一些参数:

isPregnant IS NULL AND deathdate IS NULL
  

例如,我需要获取borndate值,将其与之比较   寻找年龄的当前日期

根据您的字段格式,数学可以在SQL中完成,请查看DATE function of mysql

不要低估你的SQL服务器的功能,99%的时间它可能比php更快地处理数据集。

答案 1 :(得分:1)

相反,如果立即从数组中删除某些行,请尝试限制通过SQL接收的数据。

您可以像这样遍历数组:

foreach($femaledata as $female)
{
 echo $female['name'];
}

答案 2 :(得分:0)

你是说这样的意思吗?

          $femaledata = array();
          while ($row_user = mysql_fetch_assoc($result)) {
               $ok = false;
               // do you validation for every user 

               if($ok) array_push($femaledata,$row_user);
          }

答案 3 :(得分:0)

TJHeuvel给了你正确的答案,你应该接受这个答案。但是,要告知:多维数组不需要混淆。让我看看我是否可以解释。

在PHP中,您可以将任何对象放入一个数组中,包括其他数组。所以,假设你有一个包含其他数组的数组。当你使用循环结构(通常是foreach循环)迭代该数组时,循环的每次迭代都会给你另一个数组;如果你想访问这个子数组的元素,只需循环它。这称为嵌套循环。例如:

$r = array(
        array(1,2,3),
        array(4,5,6),
        array(7,8,9)
    );

foreach ($r as $cur)  {
    foreach ($cur as $num)  {
        echo $num;
    }
}

在外循环的每次迭代中,$cur包含一个数组;内部循环遍历此数组的内容。此技术允许您处理任何维度的数组。

但是,在您的特定情况下,您不需要使用内部循环来迭代您的子数组。您只需要通过键访问子数组的某些元素,而不是依次处理所有元素。所以,一个简单的foreach循环就可以了。