【问题标题】:Looping through array : New variable for each Value遍历数组:每个值的新变量
【发布时间】:2020-02-14 01:17:31
【问题描述】:

假设我有一个如下所示的数组:

$sql = array("name"=>"Peter", "active"=>1 , "age"=>30)

和一个看起来像这样的循环:

    for($i=0;$i<count($sql);$i++){
       $value[$i] = ($sql[$i]);
       echo $value[$i];
     }

我希望循环遍历数组并将每个值分配给一个新变量。 在这段代码中,我试图让它将值存储在:

值1

值2

值3

但遗憾的是这不起作用,因此我在这里寻求帮助。 还是我得到一个关联数组而不是数字数组是一个问题? 我不想只在这个数组上使用这个循环,而是在其他具有不同键和长度的数组上使用这个循环。

编辑:我想我可能写得不够清楚,无法告诉你我想要达到的目标: 我想在循环结束时将三个字符串值不存储在数组中:

Variable1 应包含“Peter”

Variable2 应该包含“1”

Variable3 应包含“30”

另外我希望这个循环是动态的,不仅接受这个特定的数组,而且如果我要给它一个包含 100 个值的数组,我希望有 100 个不同的变量来存储这些值。

抱歉不够清楚,我还是 stackoverflow 的新手。

【问题讨论】:

  • $value1 应该包含 $sql[1] 的值吧?
  • 是,或者更确切地说是本例中数组的第一个值“Peter”
  • Or is it a problem that i got an associative array instead of a numeric one? 是的,这就是问题所在。您有密钥,但无法访问具有数字索引的位置。你必须给他们像echo $sql['name'];这样的密钥
  • 我希望你不要介意我问,但你为什么要这样做?数组非常适合数据,并且提取到多个变量可能会使它变得笨拙。您打算如何处理这些变量?
  • 我计划在各种 sql 查询(插入/删除/更新)中使用这些变量,据我所知,这需要字符串值相应地工作。

标签: php arrays variables


【解决方案1】:

根据您的条件,将每个值分配给一个新变量,我认为您想要的是使用Variable variables。这是一个例子:

<?php
    $sql = array("name"=>"Peter", "active"=>1 , "age"=>30);
    $count = 1;
    foreach ($sql as $value) {
        $x = 'value'.$count;
        $$x = $value; //here's the usage of Variable variables
        $count++;
    }

    echo $value1.'<br/>';
    echo $value2.'<br/>';
    echo $value3.'<br/>';

我查看了您的示例变量($value1、$value2 等)。我还将您的循环更改为foreach 以轻松循环数组。我还添加了一个$count,它将作为$value 变量的编号。

如果你的索引是数字的,$count 就不是必需的,但由于它是一个关联数组,所以需要这样的东西来区分创建的变量

按要求提供简要说明:

$x 包含您要创建的变量的名称​​(在本例中为 value1),然后当您将另一个 $ 添加到 $x (变成$$x),你正在为$x的当前值赋值(这等于$value1='Peter')

【讨论】:

  • 谢谢。这工作得很好。如果你不介意,你能详细解释一下这个例子中的变量变量到底是什么吗?
  • @Tenka 添加了简短的解释,如果您需要更多说明,请发表评论
【解决方案2】:

要动态定义变量,请使用$$。 Demo

$sql = array("name"=>"Peter", "active"=>1 , "age"=>30);
$index = 1;
foreach($sql as $value){
    ${"value" . $index++} = $value;
}

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2016-08-19
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多