【发布时间】:2021-08-08 19:49:42
【问题描述】:
我检索到这样一个数组:
echo "<pre>"; var_dump($trigger);
结果是:
array(5) {
[0]=>
object(phpseclib\Math\BigInteger)#372 (2) {
["value"]=>
string(4) "0x02"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#376 (2) {
["value"]=>
string(4) "0x03"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#371 (2) {
["value"]=>
string(4) "0x01"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#373 (2) {
["value"]=>
string(6) "0x00a8"
["engine"]=>
string(3) "gmp"
}
[4]=>
array(6) {
[0]=>
object(phpseclib\Math\BigInteger)#383 (2) {
["value"]=>
string(4) "0x0f"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#377 (2) {
["value"]=>
string(4) "0x0c"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#381 (2) {
["value"]=>
string(4) "0x1b"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#380 (2) {
["value"]=>
string(4) "0x05"
["engine"]=>
string(3) "gmp"
}
[4]=>
object(phpseclib\Math\BigInteger)#367 (2) {
["value"]=>
string(4) "0x16"
["engine"]=>
string(3) "gmp"
}
[5]=>
object(phpseclib\Math\BigInteger)#418 (2) {
["value"]=>
string(4) "0x17"
["engine"]=>
string(3) "gmp"
}
}
}
array(5) {
[0]=>
object(phpseclib\Math\BigInteger)#407 (2) {
["value"]=>
string(4) "0x03"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#384 (2) {
["value"]=>
string(4) "0x01"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#394 (2) {
["value"]=>
string(4) "0x01"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#300 (2) {
["value"]=>
string(4) "0x06"
["engine"]=>
string(3) "gmp"
}
[4]=>
array(6) {
[0]=>
object(phpseclib\Math\BigInteger)#401 (2) {
["value"]=>
string(4) "0x14"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#392 (2) {
["value"]=>
string(4) "0x19"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#404 (2) {
["value"]=>
string(4) "0x02"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#385 (2) {
["value"]=>
string(4) "0x08"
["engine"]=>
string(3) "gmp"
}
[4]=>
object(phpseclib\Math\BigInteger)#399 (2) {
["value"]=>
string(4) "0x0f"
["engine"]=>
string(3) "gmp"
}
[5]=>
object(phpseclib\Math\BigInteger)#299 (2) {
["value"]=>
string(4) "0x0a"
["engine"]=>
string(3) "gmp"
}
}
}
array(5) {
[0]=>
object(phpseclib\Math\BigInteger)#370 (2) {
["value"]=>
string(4) "0x04"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#376 (2) {
["value"]=>
string(4) "0x03"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#375 (2) {
["value"]=>
string(4) "0x01"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#398 (2) {
["value"]=>
string(6) "0x00a8"
["engine"]=>
string(3) "gmp"
}
[4]=>
array(6) {
[0]=>
object(phpseclib\Math\BigInteger)#396 (2) {
["value"]=>
string(4) "0x05"
["engine"]=>
string(3) "gmp"
}
[1]=>
object(phpseclib\Math\BigInteger)#378 (2) {
["value"]=>
string(4) "0x0a"
["engine"]=>
string(3) "gmp"
}
[2]=>
object(phpseclib\Math\BigInteger)#379 (2) {
["value"]=>
string(4) "0x0c"
["engine"]=>
string(3) "gmp"
}
[3]=>
object(phpseclib\Math\BigInteger)#373 (2) {
["value"]=>
string(4) "0x13"
["engine"]=>
string(3) "gmp"
}
[4]=>
object(phpseclib\Math\BigInteger)#390 (2) {
["value"]=>
string(4) "0x19"
["engine"]=>
string(3) "gmp"
}
[5]=>
object(phpseclib\Math\BigInteger)#388 (2) {
["value"]=>
string(4) "0x1c"
["engine"]=>
string(3) "gmp"
}
}
}
现在我需要获取十六进制值(例如:0x02、0x03 等)。
我已经尝试过var_dump($trigger[1]->value); 并且得到了这个:
object(GMP)#411 (1) {
["num"]=>
string(1) "0"
}
object(GMP)#382 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#409 (1) {
["num"]=>
string(1) "1"
}
object(GMP)#383 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#401 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#396 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#416 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#400 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#395 (1) {
["num"]=>
string(1) "1"
}
object(GMP)#381 (1) {
["num"]=>
string(1) "3"
}
object(GMP)#404 (1) {
["num"]=>
string(1) "3"
}
但好像不是十六进制值!
那么我怎样才能正确地从这个$trigger 数组中获取十六进制值呢?
非常感谢你们的任何想法或建议......
提前致谢。
更新 #1:
如果我说var_dump($trigger[0][1]->value),我会收到此错误:
错误不能使用 phpseclib\Math\BigInteger 类型的对象作为数组
更新 #2:
我正在使用Tron API 来访问所有contract 信息。我可以正确获取所有门票信息,并且通过使用for loop,我可以将这个数组作为每张门票的结果。
执行此操作的代码如下:
try {
$totalTck = $TransactionBuilder->triggerSmartContract(
(array)$abi,
$contractH,
$function,
$params,
$feeLimit,
$addressH,
$callValue = 0,
$bandwidthLimit = 0);
// $totalMinus = ($totalTck[0]->value) - 1;
$totalMinus = 10;
for($i=0;$i<=$totalMinus;$i++){
$address = ADDRESS;
$addressH = $tron->toHex($address);
$contract = CONTRACT;
$contractH = $tron->toHex($contract);
$function="getTicketInfo";
$params=array("0"=>$i);
$feeLimit=30000000;
$callValue = 0;
$bandwidthLimit = 0;
try {
$trigger = $TransactionBuilder->triggerSmartContract(
(array)$abi,
$contractH,
$function,
$params,
$feeLimit,
$addressH,
$callValue = 0,
$bandwidthLimit = 0);
var_dump($trigger[0][1]->value);
//$query = DB::table('tickets')->insert([
// 'userId' => '',
// 'types' => '',
// 'startRound' => '',
// 'endRound' => '',
// 'numbers' => $trigger[0]->value
//]);
} catch (\IEXBase\TronAPI\Exception\TronException $e) {
die($e->getMessage());
}
}
} catch (\IEXBase\TronAPI\Exception\TronException $e) {
die($e->getMessage());
}
【问题讨论】:
-
您是否查看过您正在使用的 BigInteger 类的文档?
-
@Jhecht 不,我认为没有必要获取数组的值
-
这个问题需要更多的描述。你在哪里得到 $trigger?如果是一些模型记录的集合?或者从某个 API 端点获取它?
-
@sssurii 我正在使用 tron api 获取所有票务信息。然后通过使用 for 循环,我可以访问每张票,现在我需要获取这个十六进制数,然后将其转换为十进制数,但现在我无法获取十六进制数据:developers.tron.network
-
您也在尝试
var_dump($trigger[1]->value),但根据您的数据 $trigger 数组也有 2 个集合子集。所以我相信它应该像var_dump($trigger[0][1]->value)给定模型类value的属性phpseclib\Math\BigInteger不受保护。
标签: php arrays laravel associative-array laravel-8