PHP, Формат вывода массива

157
07 августа 2018, 15:20

Решаю задачки по составлению функций для новичков, которые проверяются по ожидаемым вводным данным с ожидаемыми результатами. В ожидаемом результате функция должна вернуть массив целых чисел в виде [0, 32, 18], а у меня получается сделать только [0,32,18]. Вот полная функция:

function race($v1, $v2, $g)
{
  if ($v1 >= $v2)
  {
    return null;
  }
  for ($i = 0; $i >= 0; $i++)
  {
      $tort1 = $v1 / 3600 * $i + $g;
      $tort2 = $v2 / 3600 * $i;
      if ($tort1 <= $tort2)
      {
        break;
      }
  }
  $time = $i - 1;
  $hours = floor($time / 3600); 
  if ($hours < 1)
  {
    $minutes = floor($time / 60);   
  }
  else
  {
    $minutes = floor(($time - $hours * 3600) / 60);
  }
  $seconds = $time - $hours * 3600 - $minutes * 60;
  $result = array($hours, $minutes, $seconds); 
  $b = [$hours, $minutes, $seconds];
  return $b;
}

Подскажите, пожалуйста, как вернуть его с пробелами после запятой с учётом того, что результат - массив данных типа integer?

Answer 1

Оказывается, проблема была в типе данных: я не привёл все результаты к integer, так что суть проблемы была истолкована неверно, приношу свои извинения.

Answer 2

Пробелы как бэ, чисто эстетический вид чтобы было удобно читать.

$b = [$hours, $minutes, $seconds];
return $b;

определяешь массив и возвращаешь ее. Все правильно. это тоже самое что

$array = array($hours, $minutes, $seconds);
Answer 3

массив это структура данных. пробелы, которые вы хотите где-то увидеть, к самой структуре не относятся. это форма вывода/представления. Поэтому в целом массив сам по себе не содержит ни запятых ни пробелов, ни даже скобок этих (т.к. это всего лишь синтаксическая форма записи). Но если вы хотите напечатать данный массив, то в виде строки вы вольны вывести его как вам угодно, но это уже будет строка, а не массив.

function array2str($data){
     return "[".implode(', ', $data)."]";
}
print array2str([0,38,12]);
Answer 4

Лучше всего в этом случае вместо assert_equals использовать assertTrue, а массивы сравнивать пользовательской функцией.

Код не тестировался, проверяйте сами:

 /**
 * Determine if two associative arrays are similar
 *
 * Both arrays must have the same indexes with identical values
 * without respect to key ordering 
 * 
 * @param array $a
 * @param array $b
 * @return bool
 */
function arrays_are_similar($a, $b) {
  // if the indexes don't match, return immediately
  if (count(array_diff_assoc($a, $b))) {
    return false;
  }
  // we know that the indexes, but maybe not values, match.
  // compare the values between the two arrays
  foreach($a as $k => $v) {
    if ($v !== $b[$k]) {
      return false;
    }
  }
  // we have identical indexes, and no unequal values
  return true;
}

В тесте:

$this->assertTrue(arrays_are_similar($foo, $bar));
READ ALSO
1c bitrix Каталоги [закрыт]

1c bitrix Каталоги [закрыт]

Создал новый раздел в каталоге(Фаерволы), подскажите, кто знает, как вытащить товары с другого раздела(Серверы) в новый по ID? Заранее спасибо

162
Поиск по базе по нескольким критериям

Поиск по базе по нескольким критериям

Нужно сформировать sql запросУсловия такие: сортировка по категории и по цвету, но т

162