2014-02-03 6 views
2

У меня есть функция, которая дает мне всех пользователей из Moodle.Сохранение всех значений после присвоения переменной

function getallUsers(){ 
global $DB; 
$users= $DB->get_records('user'); 
foreach($users as $user){ 
$allusers= $user->username."<br/>"; 
return $allusers; 
} 

} 

И еще один, который извлекает значения из URL-адреса.

function processXML($xmlContent){ 
$xmlObj= new SimpleXMLElement($xmlContent); 
foreach($xmlObj->unidade_curricular->inscritos->aluno as $aluno){ 
$result= $aluno->identificador."<br/>"; 
return $result; 
} 
} 

Мне нужно вызвать эти функции на протяжении всего сценария и назначить их переменным. Я повторяю их, для тестирования, но я получаю только первое значение. Как я могу хранить все значения?

$allUsers= array(); 
$allUsers= getallUsers(); 
echo $allUsers; 
$dataClip= array(); 
$dataClip= processXML($content_b); 
echo $dataClip; 
+0

Вы только сохранение результатов в скаляр. Вам нужно использовать массив или хэш. – user1418706

+0

Если вы используете 'print_r ($ allUsers)', вы увидите довольно быстро, где ошибка. –

ответ

1

Проблема заключается в том, что вы называете return в foreach цикле. Также вы добавляете пользователя в $allusers вместо добавления пользователя в массив.

Попробуйте с:

function getallUsers(){ 
    global $DB; 
    $allusers = array(); 
    $users = $DB->get_records('user'); 

    foreach($users as $user){ 
    $allusers[]= $user->username; 
    } 

    return $allusers; 
} 

function processXML($xmlContent){ 
    $xmlObj = new SimpleXMLElement($xmlContent); 

    $result = array(); 
    foreach ($xmlObj->unidade_curricular->inscritos->aluno as $aluno){ 
    $result[] = $aluno->identificador."<br/>"; 
    } 

    return $result; 
} 

пользователей печати сделать с:

$allUsers = getallUsers(); 

echo implode('<br/>', $allUsers); 
0

Исправьте первую функцию, вы держите переназначение переменной

function getallUsers(){ 
    global $DB; 
    $users= $DB->get_records('user'); 
    $allusers = ""; 
    foreach($users as $user) 
     $allusers .= $user->username."<br/>"; 

    return $allusers; 
} 

Кроме того, вы возвращались изнутри петля.

0

Вы сохраняете результаты только в скаляре. Вам нужно использовать массив или хэш. Например, вы можете сделать:

push @result, $ aluno-> identificador;

, а затем вы можете вернуть этот массив

0

Есть на самом деле две вещи здесь, которые пошли «неправильно» :)

Первый элемент является return часть. Функция возвращает только 1 значение. Все возвращается после этого не получить те или иную строчку:

function example($test){ 
    if($test == 'foo'){ return 'bar'; } 
    return 'no bar'; 
} 

Если $test=='foo' вернет «бара». Поскольку он вернул значение, «no bar» не будет возвращен. Вот почему вы получаете только первое значение.

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

for($i=1; $i<=10; $i++){ 
    $value = $i; 
} 
echo $value; 

Это приведет к 10. Сохраняется только последнее значение, оно перезаписывает $value другое 9 раз.

Чтобы это исправить, массивы:

for($i=1; $i<=10; $i++){ 
    $value[] = $i; 
} 

Вы не можете повторить массивы, но вы можете увидеть их, как это:

print_r ($value); // this will give the values. 
echo implode("/", $value); // concat them to a string -> 0/1/2/etc 
Смежные вопросы