Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 操纵多阵列_Php_Multidimensional Array - Fatal编程技术网

Php 操纵多阵列

Php 操纵多阵列,php,multidimensional-array,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[] = $r

我通过以下方式从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 ) 
    )
foreach($femaledata as $female)
{
 echo $female['name'];
}
现在我需要删除任何具有death date或ispregnant值的字符,然后我需要在其他字符上运行一些代码。例如,我需要获取borndate值,将其与当前日期进行比较以查找年龄,并且部分基于年龄,我需要为每个值运行代码,以确定角色是否在回合中怀孕

抱歉,这似乎是一个意义深远的问题。多维数组似乎仍然让我感到困惑

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

你能建议我分解或分解数组,然后对数据进行条件修改的最佳方法吗?或者,我可以删除不需要的数据,然后对数据进行条件修改

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


谢谢

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

您可以按如下方式在阵列中循环:

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 ) 
    )
foreach($femaledata as $female)
{
 echo $female['name'];
}

你是说像这样的事吗

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

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

您需要的所有事情都可以通过SQL完成:

现在我需要删除任何具有deathdate或 未怀孕

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

isPregnant IS NULL AND deathdate IS NULL
例如,我需要获取borndate值,将其与 查找年龄的当前日期

根据您的字段格式,可以使用SQL进行计算,请查看


不要低估sql server的功能,在99%的情况下,它处理数据集的速度可能比php快。

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
循环就可以了。

应该注意的是,foreach循环操作数据的副本,所以如果jeremy想在循环数据的同时操作数据(听起来像是这样),他需要使用一个引用,比如:foreach($femaledata as&$female){…}我不太明白,但是为什么不更改SQL以匹配输出需求呢?是否绝对有必要从阵列中删除?