【问题标题】:Execute array push statement in php在php中执行数组push语句
【发布时间】:2020-07-17 07:29:28
【问题描述】:

我的变量有问题,想将它用作array_push。

这是我的变量

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

我想像 in 一样使用

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']";

【问题讨论】:

  • 确保您了解数组和字符串之间的区别。
  • 这适用于我的情况吗?有什么解决方法吗?因为 QueryStmtPart6 将是动态的。它会有不同数量的元素。
  • 如果所有值都来自$doc,那么您可以使用元素名称列表并这样做——也许是G03,G04,G05
  • @NigelRen 我不知道该怎么做。能给我举个例子吗?谢谢:)

标签: php arrays variables push


【解决方案1】:

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

首先在您的 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";

【讨论】:

  • 哇。那很棒!谢谢。但是我如何像在 array_push($jsonData,array($doc['ESN'], $QueryStmtPart6 )) 中那样推送 $doc['ESN']; ?这样数组将是 Array ( [ESN] => ESN1 [G03] => 3 [G04] => 4 [G05] => 5 )
【解决方案2】:

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

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

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

为避免这种情况,如果您使用的是足够新的 PHP 版本,您应该应用参数解包并将代码转换为

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

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

【讨论】:

  • 这可以解决我的问题。多谢。但仅供参考,我的 $QueryStmtPart6 我从 MySQL 获取。这就是为什么它变成字符串。这是否意味着我必须将其设为数组?
  • @Norain 你有确切的字符串文字 "(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']"存储在 MySQL 列中?
  • 是的。我执行 MySQL 查询,"(int) $doc ['G03'],(int) $doc ['G04'],(int) $doc ['G05']" 是我从中得到的结果。 G04、G05 和 G03 来自我的表,我进行连接以获取字符串。仅供参考,G04,G03,G05 是动态的,它不会只固定为 3。但可能或多或少并且具有不同的值。
  • @Norain 您能否提供一小部分从 MySQL 检索结果的代码?
  • 嗨..我已经在上面编辑了我的问题。够了吗?
猜你喜欢
  • 2017-08-16
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2020-11-27
相关资源
最近更新 更多