2017-11-28 1 views
0

이 어레이는 2D 형식 인 $fields입니다. 표준 클래스가 아니며 데이터베이스에서 가져옵니다. 내가해야 할 것은 : (인코딩 된 JSON)을 다른 배열에 데이터를 삽입하고이 같은 결과를 얻을 :배열에 데이터 삽입 - json_encode에 숫자를 표시하지 않음

"fields": { 
    "0": [{ 
     "field": "text", 
     "name": "link", 
     "label": "Link", 
     "required": true, 
     "type": "string" 
    }, { 
     "field": "xx", 
     "name": "xx", 
     "label": "xx", 
     "required": xx, 
     "type": "xx" 
    }], 
    "1": { 
     { 
      "field": "xx", 
      "name": "xx", 
      "label": "xx" 
     }, 
     { 
      "field": "xx", 
      "name": "xx", 
      "label": "xx" 
     } 
    } 
} 

내가 얻을 것은 :

"fields": { 
    "0": [{ 
     "field": "xx", 
     "name": "xx", 
     "label": "xx", 
     "required": xx, 
     "type": "xx" 
    }, { 
     "field": "xx", 
     "name": "xx", 
     "label": "xx", 
     "required": true, 
     "type": "xx" 
    }], 
    "1": { 
     "2": { 
      "field": "xx", 
      "name": "xx", 
      "label": "xx" 
     }, 
     "3": { 
      "field": "xx", 
      "name": "xx", 
      "label": "xx" 
     }, 
    } 
} 

가 지금은 $f 배열에 데이터를 삽입해야 어레이 $r에 배열 $f 배열.

$r = array(
    'f' => (object) $f 
); 

PHP 코드 : 난 그냥 대신 [$c][]을 할 경우

foreach($fields AS $c => $field) { 
    $f[$field['id']][$c] = array(
     "field" => $field['field'], 
     "name" => $field['name'], 
     "label" => $field['label'], 
    ); 
    if($field['required'] == "1") { 
     $f[$field['id']][$c]['required'] = true; 
    } 
} 

문제는 주로 $c 일, 또 다른 배열을 만드는 "1": { 또는 "0": { 다음과 같이 인쇄하려면 나는 이것이 사용합니다. JavaScript 코드로 인코딩 된 JSON을 사용하고 JSON 인코딩 결과는 모두 작동하지만 첫 번째 인코딩이 필요합니다.

+0

그것은 당신의 입력이 원하는 출력이 무엇인지, 2 무엇 첫번째 정말 분명하지 않다. 귀하의 질문에 조금 더 명확하게 만들 수 있습니까? – Jeff

답변

0

첫 번째 JSON 출력이 잘못되었습니다. 질문에 복사하는 것이 오타 일 뿐이라고 기대합니다.

"1": { 
    { 

"1": [ {이어야합니다. 그런 경우가 있다면 당신은 단순히 당신의 코드 뒤에 배열 번호를 다시 매길 수 있습니다

foreach($f as &$ff) $ff = array_values($ff); 
unset($ff); 

을 또는 당신이 모르는 경우 또는 참조와 같은 :

foreach($f as $key => $ff) $f[$key] = array_values($ff); 

그런 다음로 json_encode 원하는 출력을 생성해야합니다.

foreach($fields AS $field) { 
    $f[$field['id']][] = array(
    "field" => $field['field'], 
    "name" => $field['name'], 
    "label" => $field['label'], 
); 

    //hacky way to get the key of the array just created 
    $c = count($f[$field['id']) - 1; 
    if($field['required'] == "1") { 
    $f[$field['id']][$c]['required'] = true; 
    } 
} 
: 당신은 당신이 사용할 수있는 또 다른 루프를 방지하려면

(그렇지 않으면 JSON 객체로 인코딩됩니다 키가 숫자 경우 PHP의 배열은 JSON 배열 결과, 0에서 시작하고, 더 구멍이 없음)

또는 먼저 배열을 생성하고 (IMO 조금 청소기를) 끝 부분에 삽입 : 나에게

foreach($fields => $field) { 
    $tmp = array(
    "field" => $field['field'], 
    "name" => $field['name'], 
    "label" => $field['label'], 
); 
    if($field['required'] == "1") { 
    $tmp['required'] = true; 
    } 
    $f[$field['id']][] = $tmp; 
} 
+0

정말 대단합니다. 그것은 작동하지만 그것은 루프를 두 번 실행해야한다는 것을 의미합니다. 우리가 $ fields로부터 가져 와서 $ f에 데이터를 삽입 할 때 직접적으로 그렇게 할 수있는 방법이 없다면 정말 도움이 될 것입니다. – Feitan

+0

2 개의 배열을 만드는 [] 문제를 방지하는 두 가지 옵션을 추가했습니다. – jh1711

관련 문제