Я пытаюсь сопоставить определенный набор записей, относящихся к пользователю. Например, я пытаюсь захватить все группы, частью которых является пользователь, проверив, является ли его имя пользователя частью group_members
поле. Я использую PHP explode
функция, но она возвращает только часть после разделителя. Я хочу, чтобы матч был восстановлен.
Вот мой код:
$select = new Select('groups');
$select->columns(array('group_members'))
->where("group_name != '' AND group_name IS NOT NULL");
$query = parent::$sql->getAdapter()->query(
parent::$sql->buildSqlString($select),
Adapter::QUERY_MODE_EXECUTE
);
if (count($query) > 0) {
$user = array();
foreach ($query as $value) {
// determine what groups the user is in
$user[] = $value['group_members'];
}
return $user;
if (in_array(parent::getUser(), explode(", ", $user))) {
echo "yay";
} else {
throw new GroupsExceptions("No groups were found for " . parent::getUser());
}
} else {
throw new GroupsExceptions("Looks like there are no groups created yet! Maybe you would like to create one?");
}
Вот результаты var_dump:
array(2) { [0]=> string(20) "jimmysole, timlinden" [1]=> string(9) "timlinden" }
parent::getUser()
это метод, который соответствует имени пользователя, и поле членов группы в базе данных содержит «name, name2».
Как мне найти и сопоставить только то имя пользователя, которое соответствует пользователю сеанса? Есть ли способ извлечь «jimmysole» только из первого значения массива? Кажется, я не могу заставить его работать правильно с помощью Explode, но я думаю, что, вероятно, я делаю это неправильно.
Спасибо
foreach ($query as $value) {
// determine what groups the user is in
$user = $value['group_members'];
}
это зацикливание массива $ query и добавление каждого к строке $ user, так как он перезаписывает в каждом цикле, $ user будет последним значением из $ query
if (in_array(parent::getUser(), explode(", ", $user))) {
$ user здесь строка из 1 без разделителя
так:
foreach ($query as $value) {
// determine what groups the user is in
$user[] = $value['group_members'];
}
это создает массив $ user ..
if (in_array(parent::getUser(), $user)) {
Теперь используйте массив. Нет, чтобы изменить его из строки, когда мы сначала создаем массив.
Других решений пока нет …