그래서 관련없는 이유로 자체적으로 하나의 폭파 필드가있는 배열이 있습니다. 이제 그 필드의 문자열을 폭발시키고 그 필드를 폭발의 결과로 바꾸는 데 관심이 있습니다. 나는 여기서 일하는 해결책을 가지고 있지만,보기 흉하게 보입니다. 나는 더 효율적인 것에 관심이 있습니다. 또는 적어도 미학적으로 기쁘게합니다.하나의 배열 필드 분해 및 바꾸기
예 배열 :
$items = array(
'name' => 'shirt',
'kind' => 'blue|long|L',
'price' => 10,
'amount' => 5);
그리고 목표는 'color', 'lenght', 'size'
필드로 'kind'
필드를 대체하는 것입니다.
은 지금까지 내가 가지고 :
$attribs = array('color', 'lenght', 'size'); // future indices
$temp = explode("|", $items['kind']); // exploding the field
foreach ($items as $key => $value) { // iterating through old array
if ($key == 'kind') {
foreach ($temp as $k => $v) { // iterating through exploded array
$new_items[$attribs[$k]] = $v; // assigning new array, exploded values
}
}
else $new_items[$key] = $value; // assigning new array, untouched values
}
이 해야 (나는 내 자신의 코드에 액세스 할 수없는, 마음으로 쓰고 있어요, 나는 하나의 I를 확인할 수 없습니다 제가 예를 들어, 단지 $items
배열 unset($items['kind'])
에 해당 값을 추가 할 수
$new_items = array(
'name' => 'shirt',
'color' => 'blue',
'lenght' => 'long',
'size' => 'L',
'price' => 10,
'amount' => 5);
:이 이런 식으로 뭔가를 보이는 새로운 배열) 결과를 바로 썼다 ... 그래서 오류가 있다면, 나는 사과 하지만 그건 명령을 던져 버릴거야. ut의 쾅하고, 나는 그 다음에 foreach
루프가 필요하다.
그래서 더 쉬운 방법이 있습니까?
EDIT : (회신으로 회신하기 때문에 코드가 위로 올라갑니다.) 저는 foreach 루프에서 하나를 호출하면 특정 순서로 호출합니다. 만약 내가 추가한다면, 테이블 디스플레이를 위해 필요한 순서로 엉망이됩니다. 나는 초기 데이터를 얻는 설정 방식에 의존하는 디스플레이 코드를 복잡하게해야 할 것이다. 는 현재 내가 가진 데이터 (또는 동급)을 표시 :
$items = array('name' => 'shirt', 'kind' => 'blue|long|L', 'price' => 10, 'amount' => 5);
list($items['color'], $items['lenght'], $items['size'])=explode("|",$items['kind']);
unset $items['kind'];
이 시도
echo "<td>$new_items['name']</td>\n";
foreach ($attribs as $v) echo "<td>$new_items[$v]</td>\n";
echo "<td>$new_items['price']</td>\n";
echo "<td>$new_items['amount']</td>\n";
음, 작동하지만 끝까지 추가됩니다 (편집에서 설명한 것과 동일한 문제). 흥미롭게도, ...여러분의 코드로 print_r ($ items)을 할 때, 키를 이름 - 가격 - 색상 - 길이 길이로 나열하지 않습니다 (예상대로, 유령 코드의 경우처럼). 그러나 순서대로 이름 - 가격 - 비용 - 크기 - 길이 - 색상. 폭발 한 세 마리가 뒤집혔습니다. 어째서? –