【问题标题】:Convert web results to PHP将网页结果转换为 PHP
【发布时间】:2019-05-22 03:51:24
【问题描述】:

我相信这可能很简单,之前有人问过,但我找不到它。我尝试搜索键或值,但无法弄清楚

$priceComp_xml":[{"CurrencyCode":"USD","Amount":"92.35"}]是网站返回

我试过了 $array1 = json_decode($priceComp_xml,TRUE);没有把它放到一个数组中 我也尝试过,但我无法将它放入数组中以便我可以获得值

array_values() 
array_key_exists() 
array_search() 

我想将 92.35 放入 php 变量 $cost

【问题讨论】:

  • 你说的“网站返回”是什么意思?该字符串是 API 调用的结果吗?您在那里展示的内容不适用于 json_decode 因为它不是 JSON。它的一部分是 JSON,但整个字符串不是。
  • 当你var_dump($array1)时会发生什么?
  • 只是确保我理解正确 - 你真的从网站上回复了$priceComp_xml":[{"CurrencyCode":"USD","Amount":"92.35"}] 吗?还是您的代码中的 $priceComp_xml": 部分?
  • 所以,添加到@Don't Panics commebt,如果 $priceComp_xml 不是字符串的一部分,那么它只是一个 json 数组,您需要访问每个元素,然后 json_decide 它。
  • 抱歉 $priceComp_xml 是代码的一部分

标签: php arrays xml


【解决方案1】:

如果这确实是您的结果并且您前面总是有 $priceComp_xml:,您可以简单地跳过前 16 个字符,然后使用 json_decode

$res = '$priceComp_xml":[{"CurrencyCode":"USD","Amount":"92.35"}]';
$json = substr($res, 16);
$data = json_decode($json);

如果前缀有时有其他名称,您仍然可以跳过所有内容,直到第一次出现 :-char。

$res = '$priceComp_xml":[{"CurrencyCode":"USD","Amount":"92.35"}]';
$json = substr($res, strpos($res, ':') + 1);
$data = json_decode($json);

【讨论】:

  • 仍然返回 [{"CurrencyCode":"USD","Amount":"92.35"}] 我需要将 Amount 92.35 的值放入变量中
  • @ForgivenIT $data 包含您的返回值的 json 对象表示 - 如果您只想要金额,则必须使用 $data[0]->Amount
  • 在进行变量转储后,我看到 array(1) { [0]=> object(SimpleXMLElement)#1569 (2) { ["CurrencyCode"]=> string(3) "USD" [ "金额"]=> 字符串(5) "92.35" } }
【解决方案2】:

您可以使用explode 删除前导变量名称。
使用explode意味着即使变量名发生变化它也能工作。

我在": 上使用explode 并将其限制为两个项目。

$str = '$priceComp_xml":[{"CurrencyCode":"USD","Amount":"92.35"}]';

$arr = json_decode(explode('":', $str,2)[1], true);
var_dump($arr);

输出:

array(1) {
  [0]=>
  array(2) {
    ["CurrencyCode"]=>
    string(3) "USD"
    ["Amount"]=>
    string(5) "92.35"
  }
}

并获得您可以使用的金额

echo $arr[0]['Amount']; //92.35

https://3v4l.org/Vcpov

【讨论】:

  • array(1) { [0]=> object(SimpleXMLElement)#1569 (2) { ["CurrencyCode"]=> string(3) "USD" ["Amount"]=> string (5) "92.35" } } 这是我从 var_dump echo $arr[0]['Amount']; 得到的为空
  • @ForgivenIT 我认为 json_decode 的第二个参数是数组/对象。如果你使用我的代码,它应该返回一个数组,而不是一个对象。
【解决方案3】:

使用str_replacejson_decode 结果删除不需要的string

$arr = json_decode(str_replace('$priceComp_xml":' , "" , $response ) , true );

【讨论】:

    【解决方案4】:

    这就是我最终得到它的方式(直到我做了一个 var_dump 才注意到 SimpleXMLElement

    $count = $compPricing[0];
    $result=array();
            foreach($count as $number){
                $Amount=$count->Amount->__toString();
                $CurrencyCode=$count->CurrencyCode->__toString();
    
            $result = array('Amount' => $Amount, 'CurrencyCode' => $CurrencyCode);
    }
    echo json_encode($Amount);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      相关资源
      最近更新 更多