我对变量有问题,想将其用作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']";
如@u_mulder在评论中所建议,您的变量$QueryStmtPart6
包含一个字符串。您可能想改用数组。像这样:
$QueryStmtPart6 = [(int) $doc ['G03'], (int) $doc ['G04'], (int) $doc ['G05']];
[另外一点是,函数array_push
是可变函数,这意味着它需要可变数量的参数。更重要的是,每个参数都作为单个项目添加到数组中。如果参数是数组,则函数会将新键映射到整个数组。您的示例就是这种情况。
为避免这种情况,如果您使用的是最新的PHP版本,则应应用参数解压并将代码转换为]
array_push($jsonData, $doc['ESN'], ...$QueryStmtPart6);
请注意省略号('...')。它从数组中获取每个值,并将其作为单独的参数传递给函数array_push
。
代替尝试直接使用变量,并假设所有值都来自同一数组,您可以将其分为两部分。
首先在您的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";