Взрывающиеся массивы в PHP с сохранением исходного ключа
Вопрос
Как я могу сделать следующее без большого количества сложного кода?
- Разнесите каждое значение массива в PHP (я вроде как знаю, как сделать этот шаг)
- Выбросьте первую часть
- Сохраните оригинальный ключ для второй части (я знаю, что там будет только две части).
Под этим я подразумеваю следующее:
$array[1]=blue,green
$array[2]=yellow,red
становится
$array[1]=green //it exploded [1] into blue and green and discarded blue
$array[2]=red // it exploded [2] into yellow and red and discarded yellow
Я только что понял, могу ли я сделать это с помощью for...каждый цикл?Если да, просто ответьте "да".Я могу закодировать его, как только буду знать, с чего начать.
Решение
учитывая это:
$array[1] = "blue,green";
$array[2] = "yellow,red";
Вот как это сделать:
foreach ($array as $key => $value) {
$temp = explode(",", $value, 2); // makes sure there's only 2 parts
$array[$key] = $temp[1];
}
Другой способ, которым вы могли бы это сделать, был бы таким:
foreach ($array as $key => $value) {
$array[$key] = preg_replace("/^.+?,$/", "", $value);
}
...или используйте комбинацию substr()
и strpos()
Другие советы
Попробуй это:
$arr = explode(',','a,b,c');
unset($arr[0]);
Хотя, на самом деле, то, о чем вы просите, не имеет смысла.Если вы знаете, что есть две части, вы, вероятно, хотите что-то более близкое к этому:
list(,$what_i_want) = explode('|','A|B',2);
foreach ($array as $k => &$v) {
$v = (array) explode(',', $v);
$v = (!empty($v[1])) ? $v[1] : $v[0];
}
Массив, с которого вы начинаете:
$array[1] = "blue,green";
$array[2] = "yellow,red";
Один из способов его кодирования:
function reduction($values)
{
// Assumes the last part is what you want (regardless of how many you have.)
return array_pop(explode(",", $values));
}
$prime = array_map('reduction', $array);
Примечание:Это создает массив, отличный от $array
.
Следовательно $array
== $prime
но не является $array
=== $prime