【问题标题】:How can I change the keys from an array?如何更改数组中的键?
【发布时间】:2013-12-13 09:29:09
【问题描述】:

我在 Zend Framework 中创建了一个数组,我需要在其中更改一些键。 键现在增加了一个整数,我需要以某种不同的方式增加它们。 我有以下代码:

public function turnoverAction()
    {
        $arrayTurnover = array();
        $selectDebiteur = $this->tableDebiteuren->select("debiteur_id","debiteur_nummer","bedrijf_id")
        ->setIntegrityCheck(false)
        ->where('debiteur_id = 3');
        $debiteur = $this->tableDebiteuren->fetchRow($selectDebiteur);

        $selectverkoopHoofdpost = $this->tableVerkoopHoofdpost->select("*")
        ->setIntegrityCheck(false);
        $verkoopHoofdposten = $this->tableVerkoopHoofdpost->fetchAll($selectverkoopHoofdpost);

        $currentYear = (int)date('Y');
        $amountOfYearsToShow = $currentYear - 5 + 1;
        for($amountOfYearsToShow; $amountOfYearsToShow <= $currentYear; $amountOfYearsToShow++)
        {
            $amountOfYearsToShowBegin = $amountOfYearsToShow.'-01-01';
            $amountOfYearsToShowEnd = $amountOfYearsToShow.'-12-31';
            $arrayYear = array();
            $totaal = 0;
            foreach($verkoopHoofdposten as $verkoopHoofdpost)
            {
                $selectverkoopSubpost = $this->tableVerkoopSubpost->select("*")
                ->setIntegrityCheck(false)
                ->joinLeft('verkoopPost','verkoopPost.verkoopSubpost_id = verkoopSubpost.verkoopSubpost_id')
                ->joinLeft('verkoop_verkoopPost','verkoop_verkoopPost.verkoopPost_id = verkoopPost.verkoopPost_id')
                ->joinLeft('verkopen','verkopen.verkoop_id = verkoop_verkoopPost.verkoop_id')
                ->where('verkopen.debiteur_nummer = ' . $debiteur['debiteur_nummer'])
                ->where('verkopen.verkoop_factuurdatum > ? ', $amountOfYearsToShowBegin)
                ->where('verkopen.verkoop_factuurdatum < ? ', $amountOfYearsToShowEnd)
                ->where('verkoopHoofdpost_id = ' . $verkoopHoofdpost['verkoopHoofdpost_id']);
                $verkoopSubposten = $this->tableVerkoopSubpost->fetchAll($selectverkoopSubpost);

                $totaal_hoofdpost = 0;
                foreach($verkoopSubposten as $verkoopSubpost)
                {
                    $totaal_hoofdpost += $verkoopSubpost['verkoopPost_verkoopsom'];
                }
                $totaal += $totaal_hoofdpost;

                $turnoverValues['post']['totaal_hoofdpost'] = number_format($totaal_hoofdpost, 2, ',', '.');
                $turnoverValues['post']['hoofdpost_omschrijving'] = $verkoopHoofdpost['verkoopHoofdpost_omschrijving'];
                array_push($arrayYear, $turnoverValues);
            }
            $turnoverValue['totaal'] = number_format($totaal, 2, ',', '.');
            array_push($arrayYear, $turnoverValue);
            array_push($arrayTurnover, $arrayYear);
            unset($arrayYear);
        }
        var_dump($arrayTurnover); 
    }

这将返回以下输出:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["post"]=>
      array(2) {
        ["totaal_hoofdpost"]=>
        string(6) "value"
        ["hoofdpost_omschrijving"]=>
        string(4) "value"
      }
    }
    [1]=>
    array(1) {
      ["post"]=>
      array(2) {
        ["totaal_hoofdpost"]=>
        string(5) "value"
        ["hoofdpost_omschrijving"]=>
        string(8) "value"
      }
    }
  }
 [1]=>
  array(2) {
    [0]=>
    array(1) {
      ["post"]=>
      array(2) {
        ["totaal_hoofdpost"]=>
        string(6) "value"
        ["hoofdpost_omschrijving"]=>
        string(4) "value"
      }
    }
    [1]=>
    array(1) {
      ["post"]=>
      array(2) {
        ["totaal_hoofdpost"]=>
        string(5) "value"
        ["hoofdpost_omschrijving"]=>
        string(8) "value"
      }
    }
  }
}

但是我需要以下输出:

array(2) {
  [2009]=>
  array(2) {
    ["post"]=>
    array(1) {
        ["totaal_hoofdpost"]=>
        string(6) "value"
        ["hoofdpost_omschrijving"]=>
        string(4) "value"
    }
    ["post"]=>
    array(1) {
        ["totaal_hoofdpost"]=>
        string(5) "value"
        ["hoofdpost_omschrijving"]=>
        string(8) "value"
    }
  }
 [2010]=>
  array(2) {
    ["post"]=>
    array(1) {
        ["totaal_hoofdpost"]=>
        string(6) "value"
        ["hoofdpost_omschrijving"]=>
        string(4) "value"
    }
    ["post"]=>
    array(1) {
        ["totaal_hoofdpost"]=>
        string(5) "value"
        ["hoofdpost_omschrijving"]=>
        string(8) "value"
    }
  }
}

这有可能吗?

【问题讨论】:

  • 也许你可以使用array[$amountOfYearsToShow] = $arrayYear而不是array_push

标签: php zend-framework frameworks


【解决方案1】:

最好使用直接数组赋值而不是使用array_push

在您的情况下,您可能只需要替换 array_push($arrayTurnover, $arrayYear); 并放入类似

的内容
$arrayTurnover[$amountOfYearsToShow] = $arrayYear;

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2013-03-30
    • 2021-04-14
    • 2021-09-10
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多