此代码正常工作:
$message = json_encode(array('jsonrpc' => '2.0', 'id' => 1, 'method' => 'getExchangeAmount', 'params' => array(array('from' => 'BTC', 'to' => 'ETH', 'amount' => '1'),array('from' => 'BTC', 'to' => 'ETC', 'amount' => '1'))));
但是我试图将其更改为此,但它不起作用:
$exchange_pairs = file_get_contents('exchange_pairs.txt', true);
$message = json_encode(array('jsonrpc' => '2.0', 'id' => 1, 'method' => 'getExchangeAmount', 'params' => array($exchange_pairs)));
这是exchange_pairs.txt
文件中的内容:
array('from' => 'BTC', 'to' => 'ETH', 'amount' => '1'),array('from' => 'BTC', 'to' => 'ETC', 'amount' => '1')
这不是我的选择,我必须从文件中获取此数据。我知道这很不方便。
我猜这行是无效的,但是不知道为什么或需要更改为什么?
'params' => array($exchange_pairs)
有什么建议吗?
答案 0 :(得分:0)
您正在使用file_get_contents()获取 text (.txt)文件的 text 内容。您可以像在这里一样将这些内容放入变量中(在本例中为$ exhange_pairs),但是PHP仍然只会将该内容视为字符串。不作为一系列数组。更糟的是,您正在使用的文本文件似乎将“代码”塞入了CSV格式。但是您不能简单地将“,”上的值分开,因为文件的其余部分也包含逗号。
发生的事情是PHP正在读取您的语句,如下所示:
'params' => array("A STRING VALUE!")
首先,请记住,这是尝试从另一个文件获取数组值的可怕方法。如果您只是想从该 text 文件中获取值并以PHP 数组的形式读取它们,则需要解析这些字符串内容和/或 eval 这些内容。 (请不要这样做-但是您正在描述的当前设置看起来似乎是一种必要的方法。)
正确方法是将文件中的数据转换为标准文件格式(JSON,CSV等),因此在读取文本文件后可以有效地将其解析为变量。但是,如果这根本不是一种选择,那么这是一种使其工作的方法(非常难看):
<?php
declare(strict_types=1);
$fileContents = "array('from' => 'BTC', 'to' => 'ETH', 'amount' => '1'),array('from' => 'BTC', 'to' => 'ETC', 'amount' => '1')";
$paramsArray = [];
$arrayPieces = explode('),', $fileContents);
foreach ($arrayPieces as $index => $arrayString) {
if ($index !== count($arrayPieces) - 1) {
$arrayString .= ')';
}
$arrayString = '$paramsArray[] = ' . $arrayString . ';';
eval($arrayString);
}
var_dump($paramsArray);
?>
答案 1 :(得分:0)
关于此的另一条注释:如果您仅必须以上面说明的格式使用数据,则忽略该数据“看起来”像PHP这样的事实会更安全。代码(例如,它正在尝试为您定义数组),并将其简单地视为文本解析操作。如果通过值解析方式,将使您不必使用eval(),因为对从脚本外某个文件使用的文本使用eval()极其危险。这是一种纯粹作为文本分析操作的方法:
<?php
declare(strict_types=1);
$fileContents = "array('from' => 'BTC', 'to' => 'ETH', 'amount' => '1'),array('from' => 'BTC', 'to' => 'ETC', 'amount' => '1')";
$paramsArray = [];
$fileContents = str_replace("'", '', $fileContents);
$fileContents = str_replace('array', '', $fileContents);
$fileContents = str_replace(' ', '', $fileContents);
$arrays = explode('),(', $fileContents);
foreach ($arrays as $arrayIndex => $array) {
$array = str_replace(')', '', $array);
$array = str_replace('(', '', $array);
$subArray = [];
$keyValuePairs = explode(',', $array);
foreach ($keyValuePairs as $keyValuePairIndex => $keyValuePair) {
$keyAndValue = explode('=>', $keyValuePair);
$subArray[$keyAndValue[0]] = $keyAndValue[1];
}
$paramsArray[] = $subArray;
}
var_dump($paramsArray);
?>