배열 수가 미확인 배열을 재귀 적으로 (n 레벨 깊이) 포함합니다. 각 배열에는 name
키가 포함될 수 있습니다. 그 값들의 유일한 목록을 만들고 싶습니다.깊은 배열의 임의의 위치에있는 특정 키의 고유 한 값 목록을 만듭니다.
예 어레이가한다고 가정
$bigArray = array(
'name'=>'one',
'something'=>array(
'name'=>'two',
'subthing'=>array('name'=>'three')
),
'anotherthing'=>array('name'=>'one')
);
예상되는 결과가 될 것이다 :
$uniques = array('one', 'two', 'three') // All the 'name' keys values and without duplicates.
여기 fiddle of my attempt이다.
내 접근 방식은 그 값을 업데이트하는 기능을 참조로 $uniques
배열을 전달 array_walk_recursive
을 사용하고 허용했다 :
$uniques = array();
function singleOut($item, $key, &$uniques) {
if ($key == 'name' && !in_array($itm,$uniques,true))
$uniques[] = $item;
}
array_walk_recursive($bigArray, 'singleOut', $uniques);
그러나, 그것은 나를 위해 작동하지 않습니다.
이 질문의 범위를 들어, 느슨한 비교가 잘됩니다.그러나이 링크를 방문하여 '0'일 수도있는 키에 대한 느슨한 비교를 사용할 때 예기치 않은 결과 (PHP 유형의 저글링 덕분에)를 볼 수 있습니다. [느슨한 비교를하면서 저글링을하면 원치 않는 결과가 발생합니다.] (https://stackoverflow.com/questions/44426990/type-juggling-while-making-loose-comparison-yields-unwanted-result)] – mickmackusa