我试图调用一个名为$index的变量,来计算一个函数内部的foreach迭代次数。在这个函数中,我调用了另一个函数,它需要在foreach结束时获得这个$index值。
<?php
$index = 0;
function edit_profile_form() {
global $index;
$current_user_id = get_current_user_id();
$data = get_user_meta ($current_user_id);
if (isset($_POST['button2'])) {
delete_user_meta($current_user_id, 'experiences');
}
if(isset($_POST['button1'])) {
save_extra_profile_fields($current_user_id, $index);
};
$experiences = get_user_meta($current_user_id, 'experiences', true);
?>
[...SOME CODE HERE...]
接下来在文件中(但总是在函数中),我调用了这个.index。
if (!empty($experiences)) {
foreach ($experiences as $key) {
?>
<div class="past_experience">
<div class="experience_header">
<div>
<label for="team">Nom de l'équipe</label>
<input class="team" name="team_<?= $index ?>" value="<?= $key['new_experience_team'];?>"/>
</div>
<div>
<label for="role">Rôle dans l'équipe</label>
<input class="role" name="role_<?= $index ?>" value="<?= $key['new_experience_role'];?>"/>
</div>
</div>
<div class="experience_textarea">
<label for="description">Description du rôle</label>
<textarea class="description" name="description_<?= $index ?>"><?= $key['new_experience_description']; ?></textarea>
<label for="palmares">Palmarés avec l'équipe</label>
<textarea class="palmares" name="palmares_<?= $index ?>"><?= $key['new_experience_palmares']; ?></textarea>
</div>
</div>
<?php
$index++;
}
} else {
?>
<div><p>Vous n'avez encore rentré aucune expérience</p></div>
这里是在文件开始时调用的函数,但放在另一个文件中。
function save_extra_profile_fields($user_id, $index) {
if (!empty($_POST['experiences'])) {
$experiences[] = $_POST['experiences'];
for ($i = 0; $i < $index; $i++) {
$experience_{$i}['new_experience_team'] = $_POST["team_{$i}"];
$experience_{$i}['new_experience_role'] = $_POST["role_{$i}"];
$experience_{$i}['new_experience_description'] = $_POST["description_{$i}"];
$experience_{$i}['new_experience_palmares'] = $_POST["palmares_{$i}"];
$experiences[] = $experience_{$i};
}
update_usermeta($user_id, 'experiences', $experiences);
}
}
因为在这个函数中,其实并没有定义$index,所以无法使用。
谢谢大家
解决方案:
试试
变化 function edit_profile_form()
到
function edit_profile_form() use ($index)
然后把里面的全局关键词去掉。
全局方式
要想让它对所有功能都可用,你可以使用 $GLOBALS['index']
而不是处处 $index
.