Передача списка Python в php

Я очень новичок в php, и я потратил довольно много времени на понимание того, как передавать аргументы из Python в php и наоборот. Теперь я знаю, как передать отдельные переменные, но я все еще застрял и не могу найти ответ на этот вопрос:

Php вызывает скрипт Python (эта часть работает), который возвращает список строк. Я хотел бы обработать этот список в php.

Когда я пытаюсь:

print mylist

в myscript.py, а затем:

$result = exec('python myscript.py')

похоже, что php понимает $ result как одну строку (что, я согласен, имеет смысл).

Я понимаю, что, возможно, json может помочь или что мне как-то нужно использовать словарь вместо списка в python. Однако я не могу понять, как именно.

Если кто-то может помочь, это будет высоко ценится! Спасибо!

4 ответа

Решение

Например:

myscript.py

import json

D = {'foo':1, 'baz': 2}

print json.dumps(D)

myscript.php

<?php 

$result = json_decode(exec('python myscript.py'), true);
echo $result['foo'];

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

Простейшей вещью было бы иметь вывод Python, похожий на список через запятую

Адам, Барри, Каин

и использовать

$result = explode(exec('python myscript.py'));

на стороне PHP, чтобы превратить ваши строковые данные обратно в массив.

Если данные непредсказуемы (могут содержать запятые) или более структурированы (больше, чем просто список), то вам следует использовать что-то вроде json, как предложено Крабом.

$str = "[u'element1', u'element2', 'element3']";

$str = str_replace( array("u'", "[", "]"), array("'", ""), $str );
$strToPHPArray = str_getcsv($str, ",", "'");
print_r( $strToPHPArray );

Выходы

Array
(
    [0] => element1
    [1] => element2
    [2] => element3
)

Видимо твой вопрос вводил в заблуждение. Был перенаправлен сюда, думая, что это решение для преобразования списков Python в массив php.

Размещение наивного решения для тех, кто хочет преобразовать списки в массив php.

// Sample python list 
$data = '[["1","2","3","4"],["11","12","13","14"],["21","22","23","24"]]';

// Removing the outer list brackets
$data =  substr($data,1,-1);

$myArr = array();
// Will get a 3 dimensional array, one dimension for each list
$myArr =explode('],', $data);

// Removing last list bracket for the last dimension
if(count($myArr)>1)
$myArr[count($myArr)-1] = substr($myArr[count($myArr)-1],0,-1);

// Removing first last bracket for each dimenion and breaking it down further
foreach ($myArr as $key => $value) {
 $value = substr($value,1);
 $myArr[$key] = array();
 $myArr[$key] = explode(',',$value);
}

//Output
Array
(
[0] => Array
    (
        [0] => "1"
        [1] => "2"
        [2] => "3"
        [3] => "4"
    )

[1] => Array
    (
        [0] => "11"
        [1] => "12"
        [2] => "13"
        [3] => "14"
    )

[2] => Array
    (
        [0] => "21"
        [1] => "22"
        [2] => "23"
        [3] => "24"
    )

)
Другие вопросы по тегам