【问题标题】:Insert a element from php variable in associative array在关联数组中插入来自php变量的元素
【发布时间】:2013-06-18 06:16:41
【问题描述】:

我有一个这样的条件字符串:

echo $cnd = "'use_funds'=>'no'";

而我的$data 数组是:

$data = array(
    $cnd,
    'quantity'   => $_POST['qty_' . $q],
    'veg_name'   => $_POST['veg_name_' . $q],
    'rate'       => $_POST['rate_' . $q],
    'ws_price'   => $_POST['ws_price_' . $q],
    'ret_price'  => $_POST['ret_price_' . $q],
    'mop'        => $_POST['mop_' . $q],
    'ret_margin' => $_POST['ret_margin_' . $q]
);

上面的echo $cnd 显示'use_funds'=>'no',但var_dump($data) 显示array 0 => string ''use_funds'=>'no'' (length=17)。因为它是一个字符串,所以我的数据没有插入到我的表中。如何将$cnd 设为关联数组元素而不是字符串?

【问题讨论】:

  • 为什么$cnd包含PHP代码?像$use_funds = 'no' 这样的东西不是更有意义吗?

标签: php arrays string associative-array


【解决方案1】:
if (your condition) {
  $data['use_funds'] = 'no';
} else {
  //some other code
}

【讨论】:

  • 您好 Nithish,如果您有解决方案,请接受 RST 答案。不要打开这个问题
【解决方案2】:

不要使用 $cnd 部分来制作和插入数组中的数据:

使用下面的代码:

$data['use_funds'] = 'no';

这段代码将追加数组。 或者你可以使用PHP的array_push函数。

【讨论】:

  • 请注意,array_push 关联数组不会像您期望的那样工作 (codepad.org/b4of4dml)
  • @PhpMyCoder 好的,然后我可以建议array_merge 通过创建两个数组并将它们合并。
  • 听起来更好。 +1 建议。
【解决方案3】:

如果必须是字符串,将其拆分并添加到数组中。 http://php.net/manual/en/function.explode.php

explode 函数接受一个字符串并将其分解为一个数组

$my_string_split = explode('=>', $cnd);
// returns [0 => 'use_funds', 1 => 'no']
$data[$my_string_split[0]] = $my_string_split[1];

如果不需要是字符串,就按字面意思做:

$data['use_funds'] = 'no';

【讨论】:

    【解决方案4】:

    首先,您的 $cnd 是字符串,而不是数组。并且您正在尝试将这个 $cnd 附加到 $data 数组中。

    为了向数组添加元素,我们基本上使用push() 方法。对于您的情况,如果您使用 array_push 方法,那么您将获得如下输出

    array_push($cnd,$data);
    $data=array(
                                        0=>'use_funds'=>'no',
                                        'quantity'=>$_POST['qty_'.$q],
                                        'veg_name'=>$_POST['veg_name_'.$q],
                                        'rate'=>$_POST['rate_'.$q],
                                        'ws_price' => $_POST['ws_price_'.$q],
                                        'ret_price' => $_POST['ret_price_'.$q],
                                        'mop' => $_POST['mop_'.$q],
                                        'ret_margin' =>$_POST['ret_margin_'.$q]
      );
    

    所以我的建议是,如果你想要你想要的结果,那么请按照以下步骤操作:-

     either define your $cnd as an array and then use array_merge();
    

    【讨论】:

      【解决方案5】:
      echo $cnd = "'use_funds'=>'no'";
      

      以上行将"'use_funds'=>'no'" 视为一个字符串并将其分配给$cnd。因此,无论如何,除非您对其进行任何适当的更改,否则它始终保留为字符串。在这种情况下,默认密钥为0。所以,它会是这样的:

      [0] => "'use_funds'=>'no'"
      

      要解决这个问题,您可以这样做:

      $cnd = array('use_funds'=>'no');
      

      然后,您可以像这样使用array_merge() 函数将两者合并:

      array_merge($cnd, $data);
      

      【讨论】:

        【解决方案6】:

        你可以使用eval来完成它

        $cnd = "'use_funds'=>'no'";
        
        eval("\$x = array($cnd);");
        
        print_r($x);
        

        【讨论】:

        • 请不要使用 eval,它会尝试将给定的字符串解释为代码,因此非常不安全,特别是在字符串不知道是好的情况下。最好不要管它,无论如何,几乎总有一种更安全的方法来获得结果。
        • eval 有它的用途。这种情况是预定义的输入,因此不存在安全问题。我的解决方案没有改变他当前的任何设置。其他人都认为他不知道通常的数组键添加。
        猜你喜欢
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多