#javascript #php #arrays #csv
#javascript #php #массивы #csv
Вопрос:
У меня есть многомерные массивы, которые генерируются динамическими входными данными формы, которые пользователь может добавлять для добавления таких вещей, как награды, рабочие места и образование.
Когда я собираю данные массива, чтобы перенести их в файл .csv, он печатает группировки массива, подобные этой FinanceWaterlooTheodore2015TreasurerTorontoGary2014
.
Возможно ли отметить точку, где заканчивается цикл массива, чтобы он был более разборчивым и получался более похожим на это FinanceWaterlooTheodore2015 // TreasurerTorontoGary2014?
$unitLevelInvolvement = $_POST["unitLevelInvolvement"];
$unitInvolvementValue = "";
$i;
foreach($unitLevelInvolvement as $involvement)
{
$i ;
$unitInvolvementValue .= $involvement;
}
echo $unitInvolvementValue;
<div name="unitLevelInvolvement" id="unitLevelInvolvement">
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement[]" placeholder="Position/Committee" onBlur="this.placeholder='Position/Committee'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement[]" id="oectaUnit_1" placeholder="Unit" onBlur="this.placeholder='Unit'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<div class="clearFix"></div>
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement[]" id="unitPresident_1" placeholder="Unit President" onBlur="this.placeholder='Unit President'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<input type="date" class="two-lines-textbox" name="unitLevelInvolvement[]" id="unitYear_1" onKeyUp="checkPage3()" />
<input type="button" value=" " onClick="addUnitInvolvement()" />
</div>
</div><!-- end of unit-level-involvement div-->
<input type="submit" value="submit" />
</form><!--endForm-->
Комментарии:
1. Не могли бы вы просто сделать: $unitInvolvementValue .= «//$involvement»;
2. Нет, потому что это устроит примерно так финансы // ватерлоо //теодор//2015// казначей, а не то, что мне нужно
3.
$unitInvolvementValue .= "//" . $involvement;
должно сработать, хотя нет причин присваивать значения новой переменной только для того, чтобы повторить ее. Вы могли бы просто поместитьecho $involvement . "//";
в цикл foreach.4. Я пробовал это, но то, что он делает, это помещает // между каждым значением. Что мне нужно, так это группы значений, чтобы между ними были косые черты, так что (FinanceWaterlooTheodore2015) // (TreasurerTorontoGary2014) Итак, цикл 1 собирает первый набор, ставит разрыв, а затем цикл два соберет второй набор.
5. не лучше ли использовать запятую вместо косой черты в качестве разделителя?
Ответ №1:
Я понимаю, что вы пытаетесь ставить разделитель каждые 4 итерации (потому что у вас есть 4 входных данных).
Обратите внимание, что этот ответ будет работать, только если у вас есть ровно 4 входных данных.
Вы могли бы попробовать что-то вроде этого:
$unitLevelInvolvement = $_POST["unitLevelInvolvement"];
$unitInvolvementValue = "";
$i = 0;
foreach($unitLevelInvolvement as $involvement)
{
$unitInvolvementValue .= $involvement;
$i ;
if($i % 4 == 0){
$unitInvolvementValue .= "//";
}
}
echo $unitInvolvementValue;
Комментарии:
1. Если OP (или нечестивый пользователь) добавит / удалит поле, его данные будут повреждены. OP должен создать новый массив для каждой группы в своей форме HTML.
2. @stephenWidom Можете ли вы помочь мне с этим или направить меня на правильный путь
Ответ №2:
Прежде всего, вам нужно создать «группы», поскольку у вас их еще нет. Вы можете сделать это, создав многомерный массив с name
атрибутом. Ваш HTML может выглядеть примерно так:
<div name="unitLevelInvolvement" id="unitLevelInvolvement">
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement['group1'][]" placeholder="Position/Committee" onBlur="this.placeholder='Position/Committee'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement['group1'][]" id="oectaUnit_1" placeholder="Unit" onBlur="this.placeholder='Unit'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<div class="clearFix"></div>
<input type="text" class="two-lines-textbox" name="unitLevelInvolvement['group2'][]" id="unitPresident_1" placeholder="Unit President" onBlur="this.placeholder='Unit President'" onFocus="this.placeholder=''" onKeyUp="checkPage3()" />
<input type="date" class="two-lines-textbox" name="unitLevelInvolvement['group2'][]" id="unitYear_1" onKeyUp="checkPage3()" />
<input type="button" value=" " onClick="addUnitInvolvement()" />
</div>
</div><!-- end of unit-level-involvement div-->
Затем вы можете выполнить итерацию по массиву следующим образом:
$unitInvolvementValue = array();
foreach($unitLevelInvolvement as $group)
{
$groupInvolvement = "";
foreach($group as $involvement)
{
$groupInvolvement .= $involvement;
}
$unitInvolvementValue[] = $groupInvolvement;
}
echo implode("//", $unitInvolvementValue );
Я использую implode()
подход, потому что он добавляет разделитель только между значениями, а не в начале или конце строки.