1. PHP / Говнокод #2044

    +160.3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    $arr = getArr1();
    $arr2 = getArr2();
    foreach ($arr2 as $key => $value){
    	$arr[$key] = $value;
    }

    вот такой вот способ суммировать массивы

    Запостил: paranoid, 26 Октября 2009

    Комментарии (19) RSS

    • Я тут вижу копирование массива, а не суммирование. Странно, а нельзя было сделать так?
      $arr = $arr2;
      Ответить
      • тут именно суммирование.
        элементы из массива arr2 будут добавлены в arr1, причем, если у них есть общие ключи, то они будут заменены на соответствующие значения arr2.
        Аналог array_merge, в общем
        Ответить
        • это выглядело бы нормально, если бы происходило рекурсивное суммирование, что не умеет array_merge в принципе.
          Ответить
          • http://ru.php.net/array_merge_recursive (PHP 4 >= 4.0.1, PHP 5)
            ты про это? =))

            профи такие профи =)
            Ответить
        • array_merge сбрасывает числовые ключи
          Ответить
        • array_merge работает не так. Он ещё и цисловые индексы переупорядочивает
          а здесь аналог $arr = $arr + $arr2;
          Ответить
        • array_merge работает не так.
          Ответить
      • тут будет $arr = $arr + $arr2;
        Ответить
        • Только наоборот надо переставить переменные
          $arr = $arr2 + $arr;
          Ответить
          • значения из $arr заменяются значениями из $arr2 - так что $arr + $arr2
            Ответить
            • Все правильно, поэтому $arr2 + $arr
              Т.е. если есть ключ и в первом и во втором слагаемом, то значение не заменяется из второго слагаемого. Если нет, то просто добавляется.
              Ответить
              • если ты внимательно посмотришь, то окажется, что в цикле происходит именно замена. а значит $arr + $arr2
                Ответить
                • И я про то же самое говорю, именно про замену. Второй аргумент не заменяет значения из первого с одинаковыми ключами. Поэтому надо поменять местами слагаемые. Вот же какой упертый, взял бы и проверил
                  <?
                  
                  $arr = array(
                  	'a' => 'arr',
                  );
                  $arr2 = array(
                  	'a' => 'arr2',
                  );
                  
                  print_r($arr + $arr2); // Будет arr (и где замена?)
                  print_r($arr2 + $arr); // Будет arr2 (а вот здесь есть замена)
                  ?>
                  Ответить
                  • мда...
                    Замечание: Общие ключи будут перезаписаны по принципу "первый пришел - первый обработан".
                    и пойми тут что в мануале этим хотели сказать.
                    Ответить
                  • Вот это да!
                    На протяжении пяти комментариев выясняется, как же нужно написать: так или эдак, чтобы говнокод разрешить...
                    Сила!
                    Ответить
                    • А что делать, если не верит, как должно быть правильно :)
                      Ответить

    Добавить комментарий