2014-09-18 6 views
0

У меня есть json-файл с этой ниже точной структурой формата.Изменение значений json-файла с помощью php

[ 
{ 
    "name":"banana", 
    "type":"fruit", 
    "rate":10 
}, 
{ 
    "name":"orange", 
    "type":"fruit", 
    "rate":20 
}, 
{ 
    "name":"apple", 
    "type":"fruit", 
    "rate":30 
} 
] 

Логика цель будет

  1. если скорость фруктов обыскали 30, я бы обновить его до 31

  2. если скорость плод поисков является 31, я бы обновить до 32

  3. Если поиск фруктов составляет 32, я бы обновил его до 33

  4. если поиск фруктов равен 33, прекратите обновление и эхо «Over Priced»;

Я хотел бы обновить скорость плода, когда искали с именем фрукты «яблоко» на +1 ДО +3, когда я сопрягать поиск для него?.

Как я могу достичь логики цели?

Я попытался программирования длинный код здесь, но это не удалось с нахождением индекса изменения - finding php json array index number

+0

вы можете обновить то, что хотите, и проверить другой лимит, после его обновления вы можете разбить цикл с использованием перерыва в foreach. – SuperBear

ответ

1
$text = file_get_contents('fruits.txt'); 
$json = json_decode($text , true); 
$searchedFruit = 'apple'; 

foreach ($json as &$fruit){ 
    if($fruit['name'] === $searchedFruit){ 
    if($fruit['rate'] >= 30 && $fruit['rate'] < 33){ 
     $fruit['rate']++;   
    } else if($fruit['rate'] === 33){ 
     echo "Over priced"; 
    } 
    } 
} 

var_dump($json); 

file_put_contents('fruits.txt', json_encode($json)); 
+0

Я не хочу, чтобы все цены на фрукты быть увеличено до +1, вместо этого, если я ищу оранжевый, он должен обновить только значение оранжевой ставки на +1 – BetaCoder

+0

ответить обновлено ... – ylerjen

0

Вы зашли слишком далеко с предыдущим кодом

$json = '[{"name":"banana","type":"fruit","rate":31}, 
{"name":"orange","type":"fruit","rate":32}, 
{"name":"apple","type":"fruit","rate":33} 
]'; 

$array = json_decode($json, true); 

$maximum_rate = 32; 
$searched_fruit = "apple"; 

foreach ($array as &$value) { 
    if ($value['name'] == $searched_fruit) { 
    if ($value['rate'] > $maximum_rate) { 
     echo 'Over priced : ' . $value['name'] . "\n"; 
     break; 
    } else { 
     $value['rate']++; 
     break; 
    } 
    } 
} 

$json = json_encode($array); 

var_dump($json); 

Выход:

Over priced : apple 
[{"name":"banana","type":"fruit","rate":31}, 
{"name":"orange","type":"fruit","rate":32}, 
{"name":"apple","type":"fruit","rate":33}] 
+0

Я не хочу, чтобы все ставки фруктов были увеличены до +1, вместо этого, если я ищу оранжевый, он должен обновить только значение оранжевой ставки на +1 – BetaCoder

+0

@BetaCoder. Он не будет, он обновит только соответствующие поля на '$ search_fruit'. Я использовал foreach в случае, если у вас будет несколько фруктов/типов или вы не знаете, что с тем же именем. Edit: О, хорошо, я понял, что вы имеете в виду, когда я добавил 'break'. Ваш вопрос был неясно о «только что найденном плоде» – Sugar

+0

он будет +1 каждый плод, который не является обычным, с вашим ответом. У вас есть только предложение 1 if со всеми условиями, поэтому else будет выполняться для каждого элемента без поиска – ylerjen

Смежные вопросы