@tmtimuchin

Как сделать цикл, в котором сопоставляются 2 массива?

В целом я уже написал этот цикл на php, и он вроде как работает, но через раз... Не могу понять в чём ошибка:
$plus3 = array();
  foreach ($ar3 as $ar3_item) {
    if ($ar3_item > 0) {
      $plus3[] = array_search($ar3_item, $ar3);
    }
  }

$i1 = 0;
  foreach ($ar1 as $ar1_item) {
    if (array_search($ar1_item, $ar1) === $plus3[$i]) {
      $d1 += (($ar1[$i1] - $avrg1) ** 2) / ($n - 1);
    }
    $i1++;
  }
  echo $d1;


Здесь у меня есть 3 массива: ar1, ar3 и plus3. В plus3 я загнал ключи только положительных элементов массива ar3, после чего мне нужно провести некоторые вычисления (переменная d1) с каждым элементом массива ar1, который соответствует положительным элементам ar3, для чего я и создал plus3. Собственно цикл работает, но иногда выдаёт NULL, даже если в ar3 есть и положительные и отрицательные значения (ar1 и ar3 у меня генерируются случайно).

И ещё кое-что: вообще задача эта на C++, просто я решил сначала сделать такой набросок в привычном для себя php, чтобы разобраться в логике задачи. Если вдруг вы объясните мне этот цикл на C++, буду очень благодарен!
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
AnatolTh
@AnatolTh
Full Stack Developer
Поправьте
if (array_search($ar1_item, $ar1) === $plus3[$i]) {

на
if (array_search($ar1_item, $ar1) === $plus3[$i1]) {


но можно весь этот код уместить в три строчки:
foreach ($ar3 as $ar3_key => $ar3_item) {
  if ( $ar3_item > 0 ) $d1 += (($ar1[$ar3_key] - $avrg1) ** 2) / ($n - 1);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы