Передача списка 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"
)
)