Вопрос (foreach)?

_Михаил_

Новичок
Вопрос (foreach)?

Есть код:

$a = array( Иванов, Петров, Сидоров);
$b = array( 1, 2, 3);

$i = 0;

foreach ($a as $v) {

if(substr($a[$i],0,1)!==substr($a[$i+1],0,1))$a[$i].='<br />';

$disp.= "<a href=\"show_contact.php?id=$b[$i]\" class='a0'><font color='#122d3c'>$a[$i]</font></a><br> ";

$i++;

}

Почему когда вместо "Иванов, Петров, Сидоров" я вставляю формирующуюся переменную которая содержит туже информацию данные правильно не отображаются?
тоже самое с 1, 2, 3 в переменной $b.
 

WeirD

Новичок
что есть формирующаяся переменная и каким образом Вы ее туда вставляете???
 

Кром

Новичок
Ты в массив $a записываешь "<br />", в результате все трется уже при первом проходе цикла.
И два массива тут не нужно. Один достаточно. Просто опредили в нем первый ключ, как единицу.

-~{}~ 09.06.05 15:27:

А хотя нет, там конкатенация. Тогда непонятно, на что жалуешся.

>$a = array( Иванов, Петров, Сидоров);
Строки нужно в кавычки брать.
 

_Михаил_

Новичок
$sql = "select id, fio from users where `fio` RLIKE '^$per.*' order by binary(fio)";
$result = @mysql_query($sql,$connection) or die("Не удалось выполнить запрос2!.");

while ($row = mysql_fetch_array($result)) {
$id = $row['id'];
$fio = $row['fio'];


$fio1.=", '$fio'";
$id1.=", $id";

}

$fio2=substr($fio1, 1);
$id2=substr($id1, 1);

Переменные $fio2 и $id2 вставляю в array(...)
когда проверяю отображение переменных через echo получается тоже самое что и Иванов, Петров, Сидоров. Фамилии в кавычки брать пробовал.
 

DiMA

php.spb.ru
Команда форума
> А хотя нет, там конкатенация. Тогда непонятно, на что жалуешся.

Он жалуется на переменную $i, которая к foreach'у никоим боком.
 

_Михаил_

Новичок
У меня общая задача заключается в следующем, есть список отсортированный по фамилиям. Скажем после отображения записей на букву "А" ставился лишний <br> и так до конца алфавита.
 

WeirD

Новичок
тогда тебе вообще не нужны массивы... все это можно проверять и в цикле while ($row = mysql_fetch_array($result))... Только нужно запоминать на какую букву начиналась фамилия на предыдущей итерации
 

_Михаил_

Новичок
а как запомнить. здесь у меня все вроде бы готово, работает, единственное, что если фамилии ввожу вручную в array(...), то список формируется правильно, а если я беру из mysql , то ничего не получается.
 

digs

Новичок
_Михаил_
Во первых, во втором куске кода сделай обычный echo и посмотри, действительно ли у тебя забираются данные.
Мысль вторая. Если руками вводишь и все работает, а берешь из массива, то нет - скорее всего ты просто в функции вывода забираемый массив не объявил как глобальный, и функция пытается работать как с локальным.
 

_Михаил_

Новичок
$fio2, $id2 через эхо смотрел, отображается тоже самое, что и при вводе в ручную, отличий нет никаких. Я даже пробовал вставлять это отображение в array(...) и все работало. Скажите пожалуйста, как в функции вывода забираемый массив объявить как глобальный?
 

digs

Новичок
sakon
Мутник
Ну так объясните мне неразумному, может я всю жизнь не правильные проги пишу. Должен же я научиться
 

_Михаил_

Новичок
Господа, если у вас есть еще какое-нибудь решение, то напишите пожалуйста. Я пока пробую разобраться в последнем предложении.
 

lorien

Новичок
У тебя так много написано, что лень разбирацца, единственный совет:
Не пиши foreach ($a as $v) {
Пиши foreach ($a as $key => $v) {
А то у тебя в версии php 4.3.10 будут косяки, потому что он вернеёт в $v не элемент массива $a, а массив
 

tashkentchi

Новичок
Ошибка в логике:
PHP:
foreach ($a as $v) {
if(substr($a[$i],0,1)!==substr($a[$i+1],0,1))$a[$i].='<br />';
...
Элемент $a[$i+1] может несуществовать. И зачем здесь !==. Ведь заведомо две строки сравниваются.

Чот поторопился я. Извиняюсь.

-~{}~ 10.06.05 12:54:

Вместо
PHP:
$fio1.=", '$fio'";
Лучше бы писать
PHP:
$a[]=$fio;
 

Serguitar

Новичок->продвинутый
Я бы сделал так. Решение навскидку, так что не стопроцентное. Надо ещё подумать.
1. В конце выполнения цикла присваиваешь любой переменной текущее значение начальной буквы.
В начале цикла проверяешь существование этой переменной и сравниваешь текущее значение начальной буквы с этой переменной. При первом прохождении цикла переменная не будет существовать, при втором её значение будет равно, к примеру "А", а если при следующем прохождении первая буква фамилии "Б", то пишем бр, а при завершении цикла ей присвоено уже значение "Б". Попробуй, сработает.
 
Сверху