2012-11-08 2 views
0

대/소문자를 구분하지 않고 URL과 관련된 상태를 기반으로 다차원 배열의 URL을 정렬하려는 일반적인 경우에 대해 작업하고 있습니다. 사용자가 다른 상태로 여러 URL을 설정 한 경우 중복 URL에서 거짓으로 설정된 상태로 단 하나의 URL 만 가져 오려고합니다.고유 한 값만 유지하고 PHP의 배열에서 일부 플래그를 기반으로 모든 중복 값을 제거하는 방법은 무엇입니까?

원래 배열 :

Array 
(
[0] => Array 
    (
     [url] => www.abc.com 
     [status] => true 
    ) 

[1] => Array 
    (
     [url] => www.123.com 
     [status] => true 
    ) 

[2] => Array 
    (
     [url] => www.abc.com 
     [status] => true 
    ) 


[3] => Array 
    (
     [url] => www.Abc.com 
     [status] => false 
    ) 
) 

최종 결과는 내가 원하는 :

Array 
(
[0] => Array 
    (
     [url] => www.abc.com 
     [status] => false 
    ) 

[1] => Array 
    (
     [url] => www.123.com 
     [status] => true 
    ) 
) 
+0

내 대답을 확인하십시오. –

답변

1
$filtered = array(); 

foreach ($urls as $url) { 
    $key = strtolower($url['url']); 
    if (!isset($filtered[$key]) || $filtered[$key]['status']) { 
     $filtered[$key] = $url; 
    } 
} 

var_dump($filtered); 
+0

안녕하세요 대단히 감사합니다! 나는 PHP에 익숙하지 않고 여전히 학습 단계에 있습니다. \t \t \t \t을하지만 배열 원래의 구조를 변경합니다 \t \t \t \t 내가 실행 한 후 다음과 같은 배열을 얻고있다. \t \t \t \t '어레이 (2) { \t \t \t \t [ "www.abc.com"] => \t \t \t \t 어레이 (2) { \t : \t \t \t \t이 기존 출력 \t \t \t [ "URL"] => \t \t \t \t 문자열 (11) "www.Abc.com" \t \t \t \t [ '상태'] => \t \t \t \t 문자열 (5) "FALSE" \t \t \t \t \t} \t \t \t [ "www.123.com"] => \t \t \t \t 배열 (2) { \t \t \t \t [ "url"] => \t \t \t \t 문자열 (11) "www.123.COM " \t \t \t \t [ '상태'] => \t \t \t \t 스트링 (4)"을 "true \t \t \t \t} \t \t \t \t}' \t \t \t \t \t \t \t \t I 원래 게시물에 명시된대로 출력하고 싶습니다. 답장을 보내 주셔서 감사합니다. – Harshal

+0

키를 제거하려면'array_values ​​()'를 사용하십시오. 내 대답에서 가장 중요한 테이크 어웨이는 * 유일성을 위해 단순히 배열 키를 사용하는 알고리즘 *입니다. 필요에 따라 수정하십시오. – deceze

+0

제대로 작동합니다. :) – Harshal

0

이 시도 :이 도움이

<?php 
$arr = array(
    array(
     'url' => 'www.abc.com', 
     'status' => 'true' 
    ), 
    array(
     'url' => 'www.123.com', 
     'status' => 'true' 
    ), 
    array(
     'url' => 'www.abc.com', 
     'status' => 'true' 
    ), 
    array(
     'url' => 'www.Abc.com', 
     'status' => 'false' 
    ) 
); 

function tolower($v) { 
    return array('url'=>strtolower($v['url']),'status'=>$v['status']); 
} 
$arr = array_map("unserialize", array_unique(array_map("serialize",array_map("tolower", $arr)))); 
print_r($arr); 
?> 

희망을.

+0

솔루션을 주셔서 감사하지만 나에게 예상대로 출력 배열을주지 않을 수 있습니다. – Harshal

관련 문제