2012-11-30 3 views
3

저는 방금 PHP 프로그래밍을 한 지 오래되었습니다. 그래서 나는 녹을 걷어차려고 노력하고 있습니다.연관 배열 (2 parter)

저는 이와 같이 연관 배열 구조를 만들려고합니다.

[results] 
    [total] 
    [people] 
     [name] 
     [street] 
     [city] 
     [state] 
     [zip] 

Currently, I have this. 

$people = array('name' => '', 
       'street' => '', 
       'city' => '', 
       'state' => '', 
       'zip' =>); 

$results = array('total' => 10, --set dynamically 
       'people' => $people); 

그래서 내 머리 속에는 while 루프에서 채울 수있는 빈 다차원 배열을 만들기를 바랍니다.

먼저이 질문은 적절한 형식입니까? 나는 가까운 느낌이지만 옳지 않은 것 같아. 내가하고있는 일을 이해하는 것이 도움이 될 수 있습니다 (아래 참조).

그래서 저는 이것을 while 루프로 채우고 싶습니다. 이것은 기본적으로 제가 지금까지 가지고있는 것입니다. 그리고 지금까지는 일할 수 없었습니다.

$i = 0; 
while loop 
{ 
    $results['people'][i][name] = 'XxXxX' 
    $results['people'][i][street] = 'XxXxX' 
    $results['people'][i][city] = 'XxXxX' 
    $results['people'][i][state] = 'XxXxX' 
    $results['people'][i][zip] = 'XxXxX' 


%i++; 
} 

나는 이것을 여러 가지 조합으로 시도해 왔지만 여전히 올바르게 할 수 없었습니다. 중요한 경우이 배열을 가져와 JSON 객체로 브라우저에 다시 보내고 싶습니다.

초기화가 잘못되었거나 루프의 배열을 잘못 설정했는지 또는 둘 다 잘못된 것인지 확실하지 않습니다.

+0

for 위에 몇 가지 포인터, 키 인용 부호를 사용할 필요가 등 이름/거리, 당신의 증가 기 난에게 $ 할 필요가 [$ i]를, 할 필요가 % 1이 아니며 while 조건이 괄호 안에 있어야합니다. – WebChemist

답변

1

PHP 배열을 개별적으로 인스턴스화하고 내부에서 인스턴스화해야합니다. 내가 제대로 설명하는 방법을 모른다, 그러나 당신의 코드는 같은 보일 것입니다 : 당신이 연관 배열을 사용하는 경우 따옴표로 키 문자열을 마무리해야한다는 것을 염두에

$results = array(); 
$results['total'] = $somevalue; 
$results['people'] = array(); 

/*or: 
$results = array(
    'total' => $somevalue, 
    'people' => array() 
);*/ 

$i = 0; 
while($some_condition) { //or: for($i=0; $i<$something; $i++) { 
    $results['people'][$i] = array(); 
    $results['people'][$i]['name'] = 'XxXxX'; 
    $results['people'][$i]['street'] = 'XxXxX'; 
    $results['people'][$i]['city'] = 'XxXxX'; 
    $results['people'][$i]['state'] = 'XxXxX'; 
    $results['people'][$i]['zip'] = 'XxXxX'; 

    /*or: 
    $results['people'][$i] = array(
     'name' => 'XxXxX', 
     'street' => 'XxXxX', 
     'city' => 'XxXxX', 
     'state' => 'XxXxX', 
     'zip' => 'XxXxX', 
    );*/ 

    $i++; 
} 

곰. 또한 정수 인덱스를 사용하여 연관 배열에 계속 액세스 할 수 있습니다.

+0

너무 빨리 응답 해 주셔서 감사합니다. 그게 바로 제가 찾던 것입니다. – complexenigma

+0

네, C와 같은 언어 중 하나에서 오는 것처럼 들립니다. "기본적으로 컴퓨터에"X X Y Y Z 배열의 int가 필요합니다. "라고 말하면서 즉시 많은 양의 메모리를 꺼냅니다. 사용하고 하늘이 더 필요하면 도움이됩니다. PHP에서 그 이상한 배열과 동적 타이핑에 대한 반쯤 이해할 수있는 클러스터로가는 것은 약간의 mindfsck입니다.PHP는 여기에서 내리막 길 * : D – Sammitch

0

내가 보는 몇 가지 문제점이 있습니다. 첫 번째는 $i++ 대신 %i++입니다. 나중에 $i 대신 i을 참조하십시오. 다음은 while 루프 안에 있으며 따옴표를 사용하지 않고 이름, 거리 등을 액세스하려고 시도하고 있습니다 (구성에 따라 경고가 표시되거나 표시되지 않을 수 있음).

이를 사용해보십시오 : 당신은 그냥 이름의 배열을 만들고 키로 변환하고 그들에게 줄 array_fill_keys를 사용할 수있는 대신 빈 문자열을 모든 키의 이름을 지정하고 선언보다

$i = 0; 
while(NEED SOME CONDITION HERE) 
{ 
    $results['people'][$i] = array(); //Need to let PHP know this will be an array 
    $results['people'][$i]['name'] = 'XxXxX' 
    $results['people'][$i]['street'] = 'XxXxX' 
    $results['people'][$i]['city'] = 'XxXxX' 
    $results['people'][$i]['state'] = 'XxXxX' 
    $results['people'][$i]['zip'] = 'XxXxX' 


$i++; 
} 
0
$i = 0; 
while (true) 
{ 
    $results['people'][$i]['name'] = 'XxXxX' 
    $results['people'][$i]['street'] = 'XxXxX' 
    $results['people'][$i]['city'] = 'XxXxX' 
    $results['people'][$i]['state'] = 'XxXxX' 
    $results['people'][$i]['zip'] = 'XxXxX' 


$i++; 
} 
+0

이것은 사실이 거짓이되거나 루프를 벗어나기 위해 깨지는 조건이 없기 때문에 무한 루프가됩니다. 실제로 진실한, 일정한 인 것은, 그것의 가치를 틀리게 재 할당하게 불가능할 것입니다! – WebChemist

0

먼저 모든 디폴트 값 (루프 내에서 추가 (.=)을 사용해야하는 경우가 아니면 '' 대신 NULL을 사용해야합니다.) while 루프가 아닌 for 루프를 사용하지만을 선호하는 경우 while $i < 10$i++과 함께 사용할 수 있습니다. 당신이 여기에서 [i]를 가지고

$people = array_fill_keys(array('name', 'street', 'city', 'state', 'zip'), ''); 

$results = array('total' => 10, 'people' => array()); 

for($i = 0; $i < $results['total']; $i++){ 
    $results['people'][$i]['name'] = 'XxXxX'; 
    $results['people'][$i]['street'] = 'XxXxX'; 
    $results['people'][$i]['city'] = 'XxXxX'; 
    $results['people'][$i]['state'] = 'XxXxX'; 
    $results['people'][$i]['zip'] = 'XxXxX'; 
}