2013-08-30 1 views
0

내의 모든 아이템을 기반으로 PHP 조건 :내가 그렇게 같은 woocommerce (워드 프레스) 카트 아이템의 시리즈에서 범주 이름을 추출하는 PHP를 사용하고 배열

<?php $stack = array(); 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
    $_product = $values['data']; 
    $category = $_product->get_categories(); 
    array_push($stack, $category);    
} 

카트에 두 제품, 각각이있는 경우 다른 카테고리는 print_r($stack)의 출력은 수 있습니다 : 배열 ([0] => 추수 감사절 [1] => 가금류)에 관계없이 제품의

, 내가 지금 같은 조건문을 실행해야합니다

if (in_array('T-Shirts', $stack[1])) echo "True"; else echo "False"; 

위 조건은 배열의 두 번째 항목 만보고 있으며 모든 항목이 아닙니다. 배열의 모든 항목을 검색하려면 어떻게해야합니까?

+0

아니요,이 코드에서 strip_tags를 제거해야합니다. 데이터베이스에 html을 저장하지 마십시오. –

+0

스트립 태그는 단순히 get_categories()에서 반환 된 링크를 제거합니다. 하이퍼 링크에서 텍스트를 추출해야합니다. – JCHASE11

+0

나는 이해하지만 매우 취약한 알고리즘이다. –

답변

1
$category = $_product->get_categories(); 
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories); 
if (in_array('Pants', $categories[1])) { 
?> 
    <h2>This product has Pants, and potentially other categories</h2> 
<?php 
} 

$ categories [1]은 각 요소가 단일 범주 인 배열입니다. in_array()는 배열에서 요청 된 값이 ANYWHERE인지 확인합니다.

테스트를 :

$category = '<a href="linktocategorypage" rel="tag">T-Shirts</a><a href="linktocategorypage" rel="tag">Pants</a>'; 
preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories); 
$pants = in_array('Pants', $categories[1]); 
if ($pants) echo "True"; else echo "False"; 
print_r($categories[1]); 

수율 :

True 

Array 
(
    [0] => T-Shirts 
    [1] => Pants 
) 

업데이트

코드와 통합 :

$stack = array(); 
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
    $_product = $values['data']; 
    $category = $_product->get_categories(); 
    preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories); 
    foreach($categories[1] as $cat) $stack[] = $cat; // Could also use array_merge here 
} 

if(in_array('Pants', $stack)) echo 'We have pants'; 
else echo 'We do not have pants'; 

하는 경우 $ stack 배열에 범주가 두 번 이상 표시되는 것을 원하지 않습니다.

$stack = array(); 
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
    $_product = $values['data']; 
    $category = $_product->get_categories(); 
    preg_match_all("`<[^>]+>([^<]+)</[^>]+>`", $category, $categories); 
    foreach($categories[1] as $cat) { 
     if (!in_array($cat, $stack)) $stack[] = $cat; 
    } 
} 

if(in_array('Pants', $stack)) echo 'We have pants'; 
else echo 'We do not have pants'; 
+0

감사합니다. 나에게 print_r ($ categories [1]); 배열에 첫 번째 범주 만있는 배열을 만듭니다. 모든 카테고리를 반환하지 않습니다 – JCHASE11

+0

$ category 문자열에는 무엇이 있습니까? – gwc

+0

모든 것이 foreach 문 내에 위치합니까? $ category 문자열은 위에 나열된 것과 같습니다. 두 개의 링크 – JCHASE11

관련 문제