Как сделать текстовую РАЗНОСТЬ, использующую PHP?

Использование опоры в качестве аргумента для useState прекрасно подходит для установки начального значения.

Пример

const { useState } = React;

function X({ y }) {
  const [index, setIndex] = useState(y);
  const add = () => {
    setIndex(index + 1);
  };
  return (
    <div>
      {index}
      <button onClick={add}>+</button>
    </div>
  );
}

ReactDOM.render(<X y={5} />, document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>

5
задан 10 April 2009 в 06:41
поделиться

3 ответа

В PHP нет встроенных функций сравнения. но, ура для PEAR: Text_Diff (никогда не использовал его жестко, но в PEAR я верю).

и даже есть пакет PECL, xdiff

подсказка: классы pear являются чистым php Пакеты pecl являются модулями. обычно модули работают быстрее классов, но это также зависит от функциональности. Вы просто должны проверить и оценить.

для хранения: я бы сохранил простой текст, а не различия. Пространство дешево, многие базы данных (например, mysql) поддерживают сжатие данных (или вы можете распаковать / сжать в php), но если вы сохраняете открытый текст, вы не зависите от алгоритма diff и можете изменить его позже, если потребуется.

Если вам нужна скорость, вы можете хранить как открытые тексты, так и различия.

10
ответ дан 18 December 2019 в 13:19
поделиться

Обычный процесс - хранить каждую отдельную ревизию и вычислять разницу, когда пользователь хочет ее просмотреть, возможно, кэшируя вывод, если процесс дорогой.

Вы можете сохранить базовую ревизию, а затем иметь набор различий, которые можно применять для получения предыдущих версий.

В любом случае, есть уступка; первый вариант делает получение определенных версий недорогим, за счет чего требуется немного больше обработки, необходимой для различий; вторая делает просмотр различий дешевым, но за счет потенциально дорогих инкрементальных исправлений для получения конкретной версии.

4
ответ дан 18 December 2019 в 13:19
поделиться

Если содержание очень велико, а изменения незначительны, вы можете подумать о применении подхода «обратной дельты»: только последняя версия текста сохраняется в полном формате, а предыдущая версия - это разница. с последней версии на предыдущую.

Это сэкономит много места для хранения, но при сравнении двух версий, в которых количество модификаций велико, стоимость процесса может быть значительной. В конце концов, это всегда компромисс между объемом памяти и требованиями к обработке.

Если вы не можете или не хотите использовать PEAR и PECL, вы все равно можете использовать утилиту diff, вызываемую exec. Я бы наверняка выбрал стандартный формат сравнения и никогда не разрабатывал собственный.

0
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: