|
|
|
| имею строку которая делиться через запятую
$str= 'test1,test2,test3,test4,test5';
далее перевожу в массив
$arr = explode(',',$str);
который выглядит таким образом
Array
(
[0] => test1
[1] => test2
[2] => test3
[3] => test4
[4] => test5
)
|
но как сделать массив чтобы получился без значений только ключи, тоесть таким образом, за место ключей значения
Array
(
[test1]
[test2]
[test2]
[test3]
[test4]
)
|
или строчкой
array('test1','test2','test3','test4','test5')
|
| |
|
|
|
|
|
|
|
для: web777
(18.12.2014 в 20:23)
| | Что-то вы не туда. Массив не может быть без ключей или индексов. Это правильный массив:
Array
(
[0] => test1
[1] => test2
[2] => test3
[3] => test4
[4] => test5
)
|
а так:
Array
(
[test1]
[test2]
[test2]
[test3]
[test4]
)
|
массив никогда не будет выглядеть. Получайте на здоровье в первом массиве значения по индексу. Если же надо чтобы значения массива стали ключами, а ключи его значениями, то array_flip(). | |
|
|
|
|
|
|
|
для: confirm
(18.12.2014 в 20:37)
| | ситуация такая, мне нужно сделать сравнение на совпадение, если имеется в данном массиве такое значение выполнять, иначе пропускать. Вот у меня имеется такой код
foreach($arr as $v)
{
if(in_array($v,array('test1','test2'))){
}
}
|
данный код работает если массив такой array('test1','test2')
но если будет таким
Array
(
[0] => test1
[1] => test2
...
)
|
функция in_array уже не может делать сравнения. Или может я не так делаю? | |
|
|
|
|
|
|
|
для: web777
(18.12.2014 в 20:49)
| | Что за глупости, где это вы такое прочли?
Функция in_array() ищет значение в массиве равное указанному, и ей не важно индексный это массив или ассоциативный. Вот если бы ваш массив имел ключами test1, test2, и т.д., вот тогда бы in_array() не нашел бы в нем значения указанного. В этом случае array_key_exists нужен.
PS. Только учтите, in_array возвращает результат поиска найдено/не найдено, если вам нужен не сам факт есть или нет, а позиция в которой было найдено, то для этого служит array_search. | |
|
|
|
|
|
|
|
для: confirm
(18.12.2014 в 20:55)
| | мне нужно выводить пункт в меню только разрешённый данному пользователю, поэтому производится проверка, если значение совпадает, пункт отображается, если упоминания не имеется, то пункт не выводится
[accessActions] => 0
[accessRoles] => 1
[accessUsers] => 2
[managerAccess] => 3
[Settings] => 4
[settingBoard] => 5
[updateBoard] => 6
[categoryNews] => 7
[createNews] => 8
[cropPhotoNews] => 9
[deleteNews] => 10
[deletePhotoNews] => 11
[listNews] => 12
[listPhotoNews] => 13
[readNews] => 14
[News] => 15
[settingNews] => 16
[updateNews] => 17
[updatePhotoNews] => 18
[uploadPhotoNews] => 19
[Currency] => 20
[Directories] => 21
[Geo] => 22
[Lists] => 23
[Photo] => 24
|
array_search ищет по фразам, а мне нужно точное совпадение. Например если сравнивается 'News' то array_search найдёт такие пункты News, updateNews, settingNews, listNews, тоесть не только News
попробую ещё раз попытаться с in_array() поэксперементировать
спасибо | |
|
|
|
|
|
|
|
для: web777
(18.12.2014 в 21:12)
| | array_search не разбирает строку регулярными выражениями, поэтому с чего вы взяли что он так поступит? И в вашем массиве settingNews и другие, это не значения, а ключи, и array_search тут никаким боком вам не поможет, для этого нужно искать совпадения ключа массива - array_key_exists. Я же писал об этом. | |
|
|
|
|
|
|
|
для: confirm
(18.12.2014 в 21:35)
| | спасибо, теперь всё заработало, последний код с in_array странно почему ранее не срабатывало | |
|
|
|