在php中执行数组推入语句

问题描述 投票:0回答:2

我对变量有问题,想将其用作array_push。

这是我的变量

$QueryStmtPart6 = "(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']";

我想像在一样使用

array_push($jsonData,array( $doc['ESN'],(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05'] ));

但不要使用该字符串。我想使用一个变量。像这样的东西

array_push($jsonData,array($doc['ESN'], $QueryStmtPart6 ));

但是我对此有一个错误,因为它将插入变成这样

0 => array:2 [▼
0 => "ESN1"
1 => "(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']" ]

这就是我想要的

0 => array:4 [▼
0 => "ESN1"
1 => 0
2 => 1
3 => 0 ]

我也尝试过这个

array_push($jsonData,array($doc['ESN'], $$QueryStmtPart6 ));

但它给我错误

Notice: Undefined variable: (int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']

这是我从MySQL检索数据的方式

  $QueryStmtPart5 =  SELECT GROUP_CONCAT(DISTINCT CONCAT('(int) &&doc [''',Location,''']' )) AS str_arraypush FROM vwrpt;

一旦执行,我得到了这个

$QueryStmtPart6 = (int) &&doc ['G03'],(int) &&doc ['G04'],(int) &&doc ['G05']

并且我将&&替换为$符号,如下所示

$QueryStmtPart6 = str_replace("&&","$",$QueryStmtPart6);

所以最终结果将是

$QueryStmtPart6= "(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']";
php arrays variables push
2个回答
0
投票

如@u_mulder在评论中所建议,您的变量$QueryStmtPart6包含一个字符串。您可能想改用数组。像这样:

$QueryStmtPart6 = [(int) $doc ['G03'], (int) $doc ['G04'], (int) $doc ['G05']];

[另外一点是,函数array_push是可变函数,这意味着它需要可变数量的参数。更重要的是,每个参数都作为单个项目添加到数组中。如果参数是数组,则函数会将新键映射到整个数组。您的示例就是这种情况。

为避免这种情况,如果您使用的是最新的PHP版本,则应应用参数解压并将代码转换为]

array_push($jsonData, $doc['ESN'], ...$QueryStmtPart6);

请注意省略号('...')。它从数组中获取每个值,并将其作为单独的参数传递给函数array_push


0
投票

代替尝试直接使用变量,并假设所有值都来自同一数组,您可以将其分为两部分。

首先在您的SQL中,用逗号分隔想要的项目列表...

SELECT GROUP_CONCAT(DISTINCT Location )) AS locations 
    FROM vwrpt;

可以这样做。然后您应该得到类似...的结果。

$QueryStmtPart6 = "G03,G04,G05";

(仅用于我使用的测试数据...

$doc = [ "G01" => 1,"G02" => 2,"G03" => 3,"G04" => 4,"G05" => 5,"G06" => 6 ];

现在将您从数据库中获得的字符串,explode()放入由逗号分隔的数组中。我使用array_flip(),以便这些值成为键)...

$elements = array_flip(explode(",", $QueryStmtPart6));

然后使用array_intersect_key()提取$doc中与数据库中的键匹配的项目。

print_r( array_intersect_key($doc, $elements));

对于我使用的测试数据,这给出了...

Array
(
    [G03] => 3
    [G04] => 4
    [G05] => 5
)

要使用键向其中添加新项目,您需要执行类似...的操作

$results = array_intersect_key($doc, $elements);

$results['ESN'] = "ESN1";
© www.soinside.com 2019 - 2024. All rights reserved.