0

当我执行以下操作时

$arr['exchange'] = array('to' => $to, 'rate' => $result[0]);

该代码有效,但只打印一次。

当我这样做时

$arr['exchange'] .= array('to' => $to, 'rate' => $result[0]);

它打印出来

{"from":"NZD","exchange":"ArrayArrayArrayArray"}

什么是正确的循环方式,以便它可以在交换数组中设置 6 个子数组?

这是我的完整代码

<?php


$currencies = array("USD", "NZD", "KWD", "GBP", "AUD");
foreach ($currencies as $from)
{
$arr = array();
$arr['from'] = $from;
//$arr['exchange'] = array();

 foreach ($currencies as $to)
 {
    if($from != $to)
    {

        $url = 'http://finance.yahoo.com/d/quotes.csv?f=l1d1t1&s='.$from.$to.'=X';
        $handle = fopen($url, 'r');

        if ($handle) {
            $result = fgetcsv($handle);
            fclose($handle);
        }
        $results = $result[1].$result[2];
        $arr['exchange'] = array('to' => $to, 'rate' => $result[0]);


    }
 }
 print json_encode($arr);
 print"<br><br>";
}

?>
4

3 回答 3

2

在 PHP 中为数组添加附加索引时,可以使用方括号[]。

例如,$arr['exchange'][] = array('to' => $to, 'rate' => $result[0]);

于 2012-06-05T01:33:37.383 回答
1

您的代码存在一些问题,即您正在寻找[]要附加到数组中的符号。

其次,我了解您要对阵列形成做什么,但我不确定为什么。使用键来跟踪各种汇率交叉点似乎更容易创建如下所示的数组,这也将在以后的 javascript 方面更容易管理。

    $currencies = array("USD", "NZD", "KWD", "GBP", "AUD");
    $cross = array();
    foreach ($currencies as $from) {
        $cross[$from] = array();
        foreach ($currencies as $to) {
            if ($from != $to) {
                $url = 'http://finance.yahoo.com/d/quotes.csv?f=l1d1t1&s=' . $from . $to . '=X';
                $handle = fopen($url, 'r');

                if ($handle) {
                    $result = fgetcsv($handle);
                    //echo "$from:$to - <br/>";
                    //var_dump($result);
                    fclose($handle);
                    $cross[$from][$to] = $result[0];
                }
            } else {
                $cross[$from][$to] = 1;
            }
        }
        print json_encode($cross);
        print"<br><br>";
    }

这样你最终会得到这样的东西:

{
"USD": {...},
"NZD": {"USD":1.532,"NZD":1,"KWD":0.81,"GBP":1.546,"AUD":1.120},
"KWD": {...},
"GBP": {...},
"AUD": {...}
}

并且可以在 javascript 中访问它,例如:

cross[from][to]

或者

cross.NZD.USD

于 2012-06-05T02:10:55.623 回答
0

在上面的代码片段中,您需要使用 array_push 函数创建多维数组。

例如 array_push($arr['exchange'],array('to' => $to, 'rate' => $result[0]));

于 2012-08-19T14:58:46.387 回答