2015-10-21 4 views
1

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

Короткая версия моего HTML-формуляр:

<html> 
    <body> 
    <form action="test.php" method="POST"/> 
     <table border="0"> 
     <tr> 
      <td align="right"><span style="font-family:Verdana">&#220;bersicht</span></td> 
      <td><textarea name="uebersicht" cols="20" rows="20"></textarea></td> 
     </tr> 
     </table> 
    </form> 
    </body> 
</html> 

<?php 
    $uebersicht = $_POST['uebersicht']; 
    $uebersicht = preg_split('/\n/', $uebersicht); 

    for ($start=0; $start < count($uebersicht); $start++) {} 
?> 

А вот пример того, что текст выглядит, как я хочу, чтобы вставить в HTML-формульный:

Samperio (59.) 
Brosinski (68.) 

0:2 
beendet 

FSV Mainz 05Borussia Dortmund 
Coface Arena, 34.000 Zuschauer 
Schiedsrichter: Tobias Stieler aus Hamburg 
Reus (18., Aubameyang) 
Mkhitaryan (82., Aubameyang) 
Mkhitaryan (10.) 

Это сильно варьирует в зависимости от целей и карт. Разбить массив не сложно, я просто делаю $uebersicht = preg_split('/\n/', $uebersicht);, как показано в коде.

Теперь я хочу получить каждый игрок, получивший карту в этой игре (каждая строка, которая заканчивается как Samperio (59.)), команды (которые также должны быть разделены), каждый гол (например, линия Mkhitaryan (82., Aubameyang) и каждая помощь (игроки в скобках, как Aubameyang) в индивидуальной переменной. это важно знать, в какой команде игроки (первые линии являются игроки из FSV Mainz 05, последние игроки из Borussia Dortmund).

проблема здесь заключается в ее изменчивости Каждая игра выглядит по-другому, что можно показать в другом примере:

André (39., Brahimi) 
Maicon (52., Neves) 
Martins Indi (19.) 
Marcano (25.) 
Pereira (82.) 
Imbula (89.) 

2:1 
beendet 

FC PortoFC Chelsea 
Estádio do Dragao, 55.000 Zuschauer 
Schiedsrichter: Antonio Miguel Mateu Lahoz aus ESP 
Willian (45.,) 
Cahill (41.) 
Azpilicueta (66.) 
Matic (79.) 

Невозможно работать с заданными номерами строк. Я действительно не знаю, как продолжить здесь и получить то, что я хочу. Есть ли возможность использовать триггер, например, «новая строка» и «(» или «)» в комбинации? Или найти конкретные символы и получить строку, в которой они найдены?

Или есть ли какие-либо решения без preg_split? Без этого первый пример выглядит следующим образом:

Samperio (59.) Brosinski (68.) 0:2 beendet FSV Mainz 05Borussia Dortmund Coface Arena, 34.000 Zuschauer Schiedsrichter: Tobias Stieler aus Hamburg Reus (18., Aubameyang) Mkhitaryan (82., Aubameyang) Mkhitaryan (10.) 

Только одна длинная линия - но я догадался, что это сложнее!

Или, может быть, PHP не подходит для этого?

+0

лучше использовать API, например http://www.openligadb.de/Sports – baao

+0

@baao уверен, что если бы у него был такой вариант, он бы этого не делал :) – lrossy

ответ

1

Для записи нет лучшего языка для этого, это можно сделать с помощью php, javascript, python, что бы вы ни хотели. Его больше узнать о процессе, как только вы это сделаете, вы можете закодировать это на любом языке, который вы хотите.

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

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

Для этого вам нужно изучить регулярное выражение для мусора, но это действительно единственный способ, если вы не хотите платить за stats.com или использовать другой API для правильного форматирования данных.

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

Итак, вы можете сказать, что строка 1 - это всегда имя команды, строка 2 всегда является местом, затем все остальное - штрафы и цели.

+0

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