2013-03-05 5 views
2

내가이중첩 된 foreach 문은

$foreacharray = array(
    "model" => array ("samsung", "sony", "philips", "acer", "hp"), 
    "qty" => array("3", "7", "5", "1", "8"), 
); 

난 할 노력하고있어하는 foreach는 모델처럼, 그래서 삼성 = 3, 소니 = 7과 수량의 양의 로고를 그려 보이는 배열을 가지고 루프 그래서 3 개의 Sony 로고와 7 개의 Samsung 로고를 그릴 것입니다.

나는이

foreach ($foreacharray["model"] as $model) 
{ 
    foreach($foreacharray["qty"] as $qty) 
    { 
     echo $model; 
     echo '<br>'; 
    } 
} 

같은 것을 함께했다 그러나 물론 않는 모든 배열 항목 각각에 대해, 나는 5 삼성의 5 SONYS가 인쇄되는 인쇄되는 끝낼 그래서 이름을 에코 등

어떻게 항목 수가 아닌 qty 배열의 값을 사용할 수 있습니까?

+5

배열 생성을 제어하고 있습니까? 그렇다면 모델을 키로하고 수량을 값으로 사용하여 단일 배열을 생성하면됩니다. –

+1

네, 질문에 대답하기 쉽습니다. 그러나 저는 @Mark Parnell입니다. – hek2mgl

+1

@Mark 당신은 대답으로 게시해야합니다. 이미 질문에 직접 응답하는 "답변"이 있습니다.그러나 때로는 가장 좋은 대답은 누군가를 완전히 다른 트랙에 몰아 넣는 것입니다. Q. 전기 톱으로 당근을 자르는 가장 좋은 방법은 무엇입니까? A. 전기 톱을 내려 칼을 사용하십시오. – csj

답변

2

왜 기능 array_combine를 사용하여이 간단하지 :이 같은 선호하는 경우

또한, foreach 문을 사용할 수 있을까?

http://www.php.net/manual/en/function.array-combine.php

예;

$newArray = array_combine($foreacharray[0], $foreacharray[1]); 
var_dump($newArray); 
// will output 
array (
    "samsung" => 3, 
    "sony" => 7, 
    "philips" => 5, 
    "acer" => 1, 
    "hp" => 8, 
) 

그럼 당신은 쉽게 그것을 쉽게

foreach($newArray as $key => $val) { 
    echo $key . ' has a quantity of ' . $val . '.'; 
} 

희망 ... 모든 값을 가져 오거나과 같이 표시 할 수 있습니다. 예를 들어, 배열 인덱스 대신 배열을 사용

+0

예를 들어 주셔서 감사합니다. –

1

당신은 가정의 모델이 고유, 값으로 키와 같은 모델과 수량을 사용하는 array_combine을 사용할 수 있습니다 : 기본적으로,

for($i = 0, $e = count($foreacharray["model"]); $i < $e; ++ $i) { 
    echo $foreacharray["model"][$i] . ' = ' . $foreacharray["qty"][$i] . '<br />'; 
} 

:

$combined = array_combine($foreacharray['model'], $foreacharray['qty']); 

foreach($combined as $model => $qty) { 
    # … 
} 
+0

감사합니다. array_combine에 대해서는 전혀 몰랐다. –

1

나는이 작업을 수행하려는 생각 단일 루프는 동일한 색인에서 두 배열을 모두 참조합니다.

foreach($foreacharray["model"] as $key => $model) { 
    echo $model . ' = ' . $foreacharray["qty"][$key] . '<br />'; 
} 
0

으로 반복 :

for (i=0; i<count($foreacharray["model"]); i++) 
{ 
    $model = $foreacharray["model"][i]; 
    $qty = $foreacharray["qty"][i]; 
    echo "$model: $qty"; 
} 
1
// #1 using one for keys, another for values: 
foreach(array_combine($foreacharray['model'],$foreacharray['qty']) as $model => $nr){ 
     var_dump($model,$nr); 
} 
// #2 map them with null: 
foreach(array_map(null,$foreacharray['model'],$foreacharray['qty']) as $data){ 
     var_dump($data); 
} 
// #3 iterators! 
$iterator = new MultipleIterator(); 
$iterator->attachIterator(new ArrayIterator($foreacharray['model'])); 
$iterator->attachIterator(new ArrayIterator($foreacharray['qty'])); 
foreach($iterator as $data){ 
     var_dump($data); 
} 

그러나 가장 실제로 소스에서이 변경됩니다.

2

우선 배열 생성을 제어하는 ​​경우 두 개의 개별 배열을 생성하는 대신 모델을 키로하고 수량을 값으로 사용하여 단일 배열을 생성하는 것이 좋습니다.

+0

이런 식으로 나에게 이런 일이 발생하지 않았다. 감사. –

0

$foreacharray["qty"]에는 foreach으로 반복 할 때 5 개의 요소가 있으므로 $foreacharray["model"] 개의 요소를 5 번 인쇄합니다. 코드가 어떻게 작동하는지, 어떻게 작성되었는지를 보여줍니다.