• В чём отличие между count и sizeof?

    php-src/ext/standard/basic_functions.c
    /* aliases from array.c */
    PHP_FALIAS(sizeof, count, arginfo_count)

    $a = [1, 2];

    count
    number of ops:  5
    compiled vars:  !0 = $a
    line     #* E I O op                           fetch          ext  return  operands
    -------------------------------------------------------------------------------------
       3     0  E >   ASSIGN                                                   !0, <array>
       5     1        INIT_FCALL                                               'count'
             2        SEND_VAR                                                 !0
             3        DO_ICALL
       7     4      > RETURN                                                   1
    
    branch: #  0; line:     3-    7; sop:     0; eop:     4; out1:  -2

    sizeofПсевдоним count()
    number of ops:  5
    compiled vars:  !0 = $a
    line     #* E I O op                           fetch          ext  return  operands
    -------------------------------------------------------------------------------------
       3     0  E >   ASSIGN                                                   !0, <array>
       6     1        INIT_FCALL                                               'sizeof'
             2        SEND_VAR                                                 !0
             3        DO_ICALL
       7     4      > RETURN                                                   1
    
    branch: #  0; line:     3-    7; sop:     0; eop:     4; out1:  -2
    Ответ написан
    Комментировать
  • Как делать шардинг такой базы данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо тег сделать, "влажные эротические фантазии".

    Сайта у нас ещё нет.
    Базы данных нет.
    Статей нет.
    Известной личности нет.
    Офигиллиарда лайков нет.

    Но зато полные штаны беспокойства, А ВДРУГ БАЗА НЕ СПРАВИЦА!!!

    В порядке конструктива.
    Купи себе пару хороших книжек, а лучше пойди на нормальные курсы, которые от Авито, не помню, как они называются. Потом пойди поработать в нормальную контору, где можно на практике разобраться, что такое база данных и с какого конца к ней подходят. Не в смысле нагрузки, а чтобы и мысли не возникало про дичь типа таблиц вида likes_for_userid_847192.
    И годков через 5 можешь начинать задумываться о вопросе, "что будет если в базе будет 1 000 000 000 0000 00000 000000!!!111адинадин записей".
    Ответ написан
    1 комментарий
  • Реализация алгоритма нормализации XML для СМЭВ 3?

    IvanU7n
    @IvanU7n
    nothing interesting here
    Для будущих искателей: вот такой монстрик у меня получился (PHP 7.1). Он проходит все проверки из МР 3.5, но, возможно, некоторых нюансов не учитывает.
    <?php
    $in = new DOMDocument();
    $in->load($argv[1]);
    
    $out = new XMLWriter();
    $out->openMemory();
    
    $index = 0;
    $stack = [null, [$in->documentElement, []]];
    while (count($stack)) {
    	$item = array_pop($stack);
    	if ($item === null) {
    		$out->text('');
    		$out->endElement();
    		continue;
    	}
    	[$node, $nsList] = $item;
    	if ($node->nodeType == XML_ELEMENT_NODE) {
    		// Let the magic begin! ;)
    		// The element itself.
    		if ($node->namespaceURI !== null) {
    			$thisLevel = false;
    			if (($nsList[$node->namespaceURI] ?? null) === null) {
    				$thisLevel = true;
    				$nsList[$node->namespaceURI] = 'ns' . ++$index;
    			}
    			$out->startElement("{$nsList[$node->namespaceURI]}:{$node->localName}");
    			if ($thisLevel) {
    				$out->writeAttribute("xmlns:{$nsList[$node->namespaceURI]}", $node->namespaceURI);
    			}
    		}
    		else {
    			$out->startElement($node->localName);
    		}
    		// Attributes.
    		$attrs = iterator_to_array($node->attributes);
    		usort($attrs, function($a, $b) {
    			if ($a->namespaceURI !== null && $b->namespaceURI === null) return -1;
    			else if ($a->namespaceURI === null && $b->namespaceURI !== null) return 1;
    			else return strcmp($a->namespaceURI, $b->namespaceURI) ?: strcmp($a->localName, $b->localName);
    		});
    		foreach ($attrs as $attr) {
    			if ($attr->namespaceURI !== null && ($nsList[$attr->namespaceURI] ?? null) === null) {
    				$nsList[$attr->namespaceURI] = 'ns' . ++$index;
    				$out->writeAttribute("xmlns:{$nsList[$attr->namespaceURI]}", $attr->namespaceURI);
    			}
    		}
    		foreach ($attrs as $attr) {
    			if ($attr->namespaceURI !== null) {
    				$out->writeAttribute("{$nsList[$attr->namespaceURI]}:{$attr->localName}", $attr->nodeValue);
    			}
    			else {
    				$out->writeAttribute($attr->localName, $attr->nodeValue);
    			}
    		}
    	}
    	else if ($node->nodeType == XML_TEXT_NODE && strlen(trim($node->nodeValue))) {
    		$out->text($node->nodeValue);
    	}
    
    	if ($node->lastChild !== null) {
    		$stack[] = null;
    		for ($node = $node->lastChild; $node !== null; $node = $node->previousSibling) {
    			$stack[] = [$node, $nsList];
    		}
    	}
    }
    
    echo $out->outputMemory(), "\n";
    
    ?>
    Ответ написан
    9 комментариев
  • Увидит ли ноутбук память больше максимального по докам объема?

    @Nikolay45
    Ограничение, как правило, накладывает контроллер памяти. Учитывая Ваш контроллер памяти, который в процессоре, и наличие двух посадочных мест под SO-DIMM, 16 Гиг памяти должны завестись. И как всегда, не забывайте обновить BIOS. При использовании равных модулей, получите бонус в виде двухканального доступа, примерно +5 — 15% быстродействия. Должно работать и 4+4 и 4+8 и 8+8. Удачи.
    Ответ написан
    1 комментарий