Генерировать многомерный массив PHP с использованием диапазона

#php #arrays #multidimensional-array

#php #массивы #многомерный массив

Вопрос:

Задача, которую нужно выполнить, — показать цену почтовых расходов за кг. Итак, начиная с 1 кг, я хочу увеличить на 0,50 для каждого кг.

Я попытался сделать это так, что, похоже, у меня не работает:

 $shipping_second_class = array (
array ('weight' => range(1,5), 'cost' => range(1,3, 0.50))
);

foreach ($shipping_second_class as $shipping_second_class) {
    echo('weight '.$shipping_second_class['weight'].' costs amp;pound;'.$shipping_second_class['cost'].'<br/>');
}
  

Похоже, это не работает. То, что я пытаюсь сделать так, чтобы его было проще поддерживать, примерно так, но с меньшим количеством кода:

 $shipping_second_class = array (
    array ('weight' => '1', 'cost' => '1'),
    array ('weight' => '2', 'cost' => '1.5'),
    array ('weight' => '3', 'cost' => '2'),
    array ('weight' => '4', 'cost' => '2.5'),
    array ('weight' => '5', 'cost' => '3'),
);

foreach ($shipping_second_class as $shipping_second_class) {
    echo('weight '.$shipping_second_class['weight'].' costs amp;pound;'.$shipping_second_class['cost'].'<br/>');
}
  

Ответ №1:

Другой простой способ

 $per_kg_extra_cost = 0.5;
foreach (range(0, 4) as $shipping) {
    $cost = 1   ( $shipping * $per_kg_extra_cost ); 
    $weight =   $shipping; 
    echo '<pre>';
    echo 'Weight: '. $weight . '   cost : ' .$cost;
}
  

Ответ №2:

Вот один из способов сделать это:

 $shipping_second_class = array (
array ('weight' => 1, 'cost' => 1)
);

for($x = 2; $x < 6; $x  ){
    $newdata = ['weight' => $x, 'cost' => 0.5   $x * 0.5];
    array_push($shipping_second_class, $newdata);
}

foreach ($shipping_second_class as $s) {
    echo('weight '.$s['weight'].' costs amp;pound;'.$s['cost'].'<br/>');
}
  

По сути, вам нужно добавить в массив после его вызова, а не инициализировать его полностью заполненным. Вы начинаете с массива со значением 1 (вы можете изменить этот код, чтобы начать с пустого массива), и оттуда он расширяется. Если вам нужно добавить больше к массиву, просто увеличьте 6 до (Desired Number) 1 в цикле for .

Я не уверен, есть ли способ добавить в массив так, как вы делаете в первом блоке кода.

Комментарии:

1. Просто примечание, это не идеальный способ его написания, я бы посоветовал улучшить его, чтобы он соответствовал вашему использованию.

Ответ №3:

Вот простой способ сделать это:

 $key = -1;
$interval = 0.5;
$shipping_second_class = array_map(function($v) use (amp;$key,$interval) {
 $key  ;
 return ["weight"=>$v,"cost"=>(1   ($interval * $key))];                              
},range(1,5));

echo json_encode($shipping_second_class);
  

Вы можете изменить переменную $interval, если вам нужно изменить способ увеличения стоимости