0

$this->Js->object() が、私が与えた配列を自動ソートすることに気づいたなら、私は驚きました。私は CakePHP 2.0 を使用してコーディングしています ここに私が得たものがあります:

私のコントローラーで:

$arrayOfPlotPoints = array();
//....
    foreach($allFilenames as $key => $value){
        $arrayOfPlotPoints[$key]['latitude'] = $value['TransactionDetail']['latitude'];
        $arrayOfPlotPoints[$key]['longitude'] = $value['TransactionDetail']['longtitude'];
        $arrayOfPlotPoints[$key]['signal_level'] = $value['TransactionDetail']['signal_level'];
        $arrayOfPlotPoints[$key]['snr_level'] = $value['TransactionDetail']['snr_level'];
        $color = $this->ColorSchema->find('first',array('fields'=>array('ColorSchema.color'),'conditions' =>array('category' => $category, 'upper_bound >=' => $value['TransactionDetail']['snr_level'], 'lower_bound <='=> $value['TransactionDetail']['snr_level'])));
        $arrayOfPlotPoints[$key]['color'] = $color['ColorSchema']['color'];
        }

//..

私のビューファイルで:

    var test = <?php echo $this->Js->object($arrayOfPlotPoints); ?>;


    for (var key in test) {
           var obj = test[key];
           for (var prop in obj) {
                color.push(obj['color']);
                latitude.push(obj['latitude']);
                longitude.push(obj['longitude']);
               }

    }

最初に $arrayOfPlotPoints の値をデバッグし、値をそのままコピーしました。そして、JavaScript の for ループでフェッチされている値を警告しようとしました。それらの発生は、コントローラーで以前にデバッグしたものとは異なります。あたかも値に従ってソートされているかのようです。これは、JS ヘルパーがコンテンツを自動ソートするということですか? その場合、オートソートを無効にすることはできますか?

4

1 に答える 1

0

すみません、私の間違いです。この私の友人の非常に鋭い目のおかげで、彼は私の問題を見つけました。

私の配列は次のようになります。

Array
(
    [0] => Array
        (
            [latitude] => 14.62163
            [longitude] => 121.05123
            [signal_level] => -75
            [snr_level] => -5
            [key] => 0
            [color] => #000000
        )

    [1] => Array
        (
            [latitude] => 14.6216233333333
            [longitude] => 121.051183333333
            [signal_level] => -73
            [snr_level] => -5
            [key] => 1
            [color] => #000000
        )

    [2] => Array
        (
            [latitude] => 14.6216266666667
            [longitude] => 121.051146666667
            [signal_level] => -73
            [snr_level] => -5
            [key] => 2
            [color] => #000000
        )

    [3] => Array
        (
            [latitude] => 14.62162
            [longitude] => 121.051088333333
            [signal_level] => -75
            [snr_level] => -5
            [key] => 3
            [color] => #000000
        )

    [4] => Array
        (
            [latitude] => 14.6216383333333
            [longitude] => 121.051103333333
            [signal_level] => -75
            [snr_level] => -5
            [key] => 4
            [color] => #000000
        )

..........

などなど..上記のコードは、内部配列の各キーを反復処理するため、ループごとにフェッチした要素の数に応じて、javascript 配列にプッシュする値を複製します。私はそこで自分自身を明確にしたことを願っています:) ...とにかく、ここに私が今得たものがあります..

for (var key in test) {
   var obj = test[key];
// alert(test[key]['latitude']);
   latitude.push(test[key]['latitude']);
   longitude.push(test[key]['longitude']);
   color.push(test[key]['color']);
}
于 2012-07-05T09:49:36.147 に答える