2016-10-24 2 views
1

것처럼 배열 한 동안 나는 배열과 같은있다. '내가 할 수있는 두 번째가 반환되면 나는 간단한 foreach($array as $key => $person)을 할 수루프는 다차원 배열

$array = array(
[0] => array(
    'name' => 'Humphrey1', 
    'email' => '[email protected]' 
), 
[1] => array(
    'name' => 'Humphrey2', 
    'email' => '[email protected]' 
) 
); 

있지만이 경우 하나 개의 결과는 (첫 번째 예제를) 반환 : 하나 이상의 결과가 검색되는 경우처럼, 그것은 본다 foreach 루프 내에서 $person['name']처럼 다음과 같이 액세스해야하므로 foreach를 실행하지 마십시오.

하나의 결과가 다차원 배열이라고 생각할 수있는 방법이 있습니까?

+0

$ new_array [] = $ 배열; foreach에서 $ new_array를 사용하십시오. – Rijin

+0

@ Rijin 하나의 결과가 반환되는 경우에만이 작업을 수행해야합니다. –

+1

개인적으로 함수/메소드가 오직 1 행만 반환 할 수있는 경우가 아니면 하나만 반환 된 경우에도 항상 항목 배열을 반환합니다. 그래서 내 제안은 데이터를 반환하는 함수를 변경하는 것입니다. –

답변

1

이 시도 :

if(!is_array($array[0])) { 
    $new_array[] = $array; 
    $array = $new_array; 
} 
0

반환되는 요소 수에 관계없이 데이터 구조를 동일하게 만드는 것이 좋습니다. 그것은 로그 용어를 도울 것이고, 이것은 낭비처럼 보이는 기능이 호출되는 곳이면 어디에서나 수행되어야 할 것입니다.

key이 있는지 확인하고 해당 조건에 따라 일부 논리를 수행 할 수 있습니다.

두 번째 키에는 첫 번째 인스턴스에 키가 있습니다. 키가 색인이됩니다.

0

this을 바탕으로, 시도 :

function isAssoc(array $arr) 
{ 
    if (array() === $arr) return false; 
    return array_keys($arr) !== range(0, count($arr) - 1); 
} 

if(isAssoc($array)){ 
    $array[] = $array; 
} 
0

배열 키의 이름은 '지정된 배열에 존재하는지 먼저 확인하시기 바랍니다. 그렇다면 다차원 배열이 아닙니다. 여기

은 당신이 다차원 만드는 방법은 다음과 같습니다

if(array_key_exists("name",$array)) 
{ 
$array = array($array); 
} 

이제 배열을 통해 루프를 가정 할 수는 다차원 배열입니다.

foreach($array as $key => $person) 
{ 
    $name = $person['name']; 
    echo $name; 
} 
0

이유는 아마도 데이터베이스에서 fetch() 또는 fetchAll()을 사용했기 때문일 수 있습니다. 어쨌든 같은 몇 가지 트릭을 사용하는 솔루션이 있습니다

$arr = !is_array($arr[0]) ? $arr : $arr[0]; 

또는

is_array($arr[0]) && ($arr = $arr[0]); 

하지만 다른 옵션이 array_walk_recursive()

$array = array(
array(
    'name' => 'Humphrey1', 
    'email' => '[email protected]' 
), 
    array(
    'name' => 'Humphrey2', 
    'email' => '[email protected]' 
) 
); 

$array2 = array(
    'name' => 'Humphrey2', 
    'email' => '[email protected]' 
); 

$print = function ($item, $key) { 
    echo $key . $item .'<br>'; 
}; 

array_walk_recursive($array, $print); 
array_walk_recursive($array2, $print);