[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Значение массива как ключ
Xpund
Добрый день.
Имеем переменную:
$perem = "yandex|41001249706329||balance|100||company|ОчкиЖизнь";
$user_xd_comp = explode( "|", $perem );
Как из того что выше, получить такую переменную:
$user_xd_comp['company'] = 'ОчкиЖизнь'; 

Но есть нюанс: $perem может быть пустой, может быть company|ОчкиЖизнь, а может yandex|41001249706329||company|ОчкиЖизнь, может и так company|ОчкиЖизнь||balance|100||yandex|41001249706329||nextkey|qwerty

_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
Invis1ble
что это за бредовый формат данных?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Xpund
Цитата (Invis1ble @ 9.07.2015 - 04:46)
что это за бредовый формат данных?

DLE =)

Решил проблему таким способом, осталось проверку добавить, есть ли нужный нам ключ, подскажите как.
   $user_xd_comp = explode( "|", $perem );
$key_xd = array_search('company', $user_xd_comp);
$key_xd = $key_xd + 1;
echo $user_xd_comp[$key_xd];
}


_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
kaww
для человека, который уже как минимум 6 лет знаком с php, эта задача вряд ли должна вызывать трудности

$perem = "yandex|41001249706329||balance|100||company|ОчкиЖизнь";
if (!empty($perem)) {

$keys = $values = [];
array_map(function($value) use (&$keys, &$values) {
list($keys[], $values[]) = explode('|', $value);
}, explode('||', $perem));
$result = array_combine($keys, $values);
} else {

$result = [];
}
var_dump($result);
Игорь_Vasinsky
может так сподручней будет?

kaww слишком тяжело.

$var = "yandex|41001249706329||balance|100||company|ОчкиЖизнь";
$var = strtr($var, array('||'=>'|'));

$user_xd_comp = explode( "|", $var );

foreach($user_xd_comp as $k=>$v){
if($k%2==0){
$res[$v] = $user_xd_comp[$k+1];
}
}


echo '<pre>' . print_r($res, 1) . '</pre>';


<pre>Array
(
[yandex] => 41001249706329
[balance] => 100
[company] => ОчкиЖизнь
)
</pre>


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
Игорь_Vasinsky, Да, твой вариант производительнее, но и его можно еще подтюниить:

$user_xd_comp = explode( "|", $var );
foreach($user_xd_comp as $k=>$v){
if($k%3==0){
$res[$v] = $user_xd_comp[$k+1];
}
}

З.Ы. попробовал такой вариант:
$user_xd_comp = explode("|", $var);
for ($i = 0, $c = count($user_xd_comp); $i < $c; $i += 3) {
$res[$user_xd_comp[$i]] = $user_xd_comp[$i + 1];
}

Оказалось, что он медленнее чем с foreach
Xpund
Всем спасибо)
То что я 6 лет на форуме, не значит, что я основательно этим занимаюсь) Для себя в свободное время. Можно было бы самому решить, но такой бы ужасный костыль поулчился)

_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
Игорь_Vasinsky
kaww
не использую for() lдля массива. только foreach()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.