Выполнить массив pu sh оператор в php - PullRequest
0 голосов
/ 05 апреля 2020

У меня проблема с переменной, и я хочу использовать ее как array_pu sh.

это моя переменная

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

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вместо того, чтобы пытаться использовать переменную напрямую и предполагая, что все значения находятся в одном массиве, вы можете сделать это в двух частях.

Сначала в вашем 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";
0 голосов
/ 05 апреля 2020

Как указано в комментарии @u_mulder, ваша переменная $QueryStmtPart6 содержит строку. Вы, вероятно, хотите использовать вместо этого массив. Например:

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

Другой момент заключается в том, что функция array_push является функцией variadi c, что означает, что она принимает переменное число аргументов. И что более важно, каждый аргумент добавляется как отдельный элемент в массив. Если аргумент является массивом, функция сопоставит новый ключ с полным массивом. Так обстоит дело в вашем примере.

Чтобы избежать этого, если вы используете достаточно свежую версию PHP, вам следует применить распаковку аргументов и превратить код в

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

Обратите внимание на многоточие ('...'). Он берет каждое значение из вашего массива и передает его в качестве отдельного аргумента функции array_push.

...