1
我知道如何在數組中執行此操作,但不知道如何使用對象執行此操作。我的目標是這樣的......PHP獲取和更改對象中的隨機項目
stdClass Object
(
[Full] => 10
[GK] => 10
[Def] => 10
[Mid] => 10
[Att] => 0
[Youth] => 0
[Coun] => 0
[Diet] => 10
[Fit] => 0
[Promo] => 10
[Y1] => 0
[Y2] => 9
[Y3] => 0
[IntScout] => 0
[U16] => 0
[Physio] => 4
[Ground] => 1
)
我需要做一個循環,檢查總的值是不大於一定值(在本例中50)。如果是,我需要他們的一個隨機和1減少它,直到最後的總不高於50
我失敗的嘗試迄今: -
$RandomTrainer = mt_rand(0, (count($this->Trainers) -1));
if ($this->Trainers->$RandomTrainer] > 0) {
$this->Trainers->$RandomTrainer] -= 1;
顯然,這不起作用,因爲它正在尋找'0'或對象中的某個數字,這不在那裏。
我跳過循環/總計部分,因爲這是在我的結尾工作。
解決方案:不完美,但它的工作原理。
$TrainerArray = get_object_vars($this->Trainers); // Cast into array.
if ($Total> 50) { // Calculated before the loop.
$TrainerFound = 0;
while ($TrainerFound == 0) {
$RandomTrainer = mt_rand(0, count($TrainerArray)) - 1; // Get a random index in the array of trainers.
reset ($TrainerArray); // Set the array to the beginning, not sure if this is needed.
while ($RandomTrainer > 0) {
next ($TrainerArray); // Keep advancing '$RandomTrainer' times.
$RandomTrainer -= 1;
}
$propertyName = key($TrainerArray); // Get the key at this point in the array.
$this->Trainers->$propertyName -= 1; // Reduce the value in the original object at this point by 1.
可能過於囉嗦,但幾個小時後,我很高興與它只是工作:)
我看到你在這裏得到什麼,但它不是很有效。 $ propertyName在這裏仍然只是返回一個數字,所以我仍然不能將它應用於我的對象。我需要獲得我認爲的$ propertyIndex的關鍵字,但不太清楚如何。 '關鍵'似乎需要目前的指數,我認爲我們沒有選擇。 – Farflame
用我的解決方案更新了我的原始帖子。這有點混亂,但它的工作原理。感謝您的建議,我使用了大部分的建議。不知道我是否可以將其標記爲正確的答案,因爲它實際上並不工作。 – Farflame
我的錯...... array_rand實際上返回了propertyName,我更新了我的代碼,所以你可以測試它,並將這個答案標記爲正確。 :) – Pipe