2016-07-20 8 views
1

Ich habe eine Reihe von Kategorien Werte aus der Datenbank bekommenvon Array in PHP

<?php foreach ($category_1['children'] as $category_2) { ?> 
    <li><a href="<?php echo $category_2['href']; ?>"> 
<?php echo $category_2['name']; ?></a> 
<?php } ?> 

Es gibt Werte wie

8.5" x 14" (Tri-Fold) 8.5" x 2.75" 8.5" x 3.667" (1/3 Page) 8.5" x 5.5" 8.5" x 5.5" (1/2 Page) 80lb gloss book, 16 Page Wall Calendar 9" x 12" Envelope 9" x 14.5" Booklets/Catalogs Bookmarks Brochures Business Cards Calendars

Das Problem ist, dass ich entfernen möchten die Werte, die Zahlen enthalten und die Werte nur mit Namen anzeigen. Für z.

Booklets/Catalogs Bookmarks Brochures Business Cards Calendars

Wie kann ich die Werte mit Zahlen aus dem Array entfernen. Kann es mit der array_filter mit Wildcard gemacht werden.

Antwort

3

Die Lösung mit array_filter und preg_match Funktionen:

... 

$category_1['children'] = array_filter($category_1['children'], function($v){ 
    return !preg_match("/\d/", $v["name"]); 
}); 
// now the $category_1['children'] array contains only items with needed "names" 
+0

danke Mann, es wirkte wie ein Charme. –

+0

@SamB, gern geschehen – RomanPerekhrest

0

Du hast recht, ist array_filter() die Lösung.

$new_array = array_filder($category_1['children'], function ($element) { 
    return !preg_match("~[0-9]~", $element['name']) 
} 

Ich habe es nicht getestet, aber es sollte funktionieren.

Tun Sie dies vor die foreach() und überprüfen Sie die Werte mit einer die(var_dump($new_array));

// bearbeiten Die Lösung von @romanperekhrest vorgesehen ist eine bessere preg_match, trotzdem, wenn Sie nicht wollen, reguläre Ausdrücke verwenden, wäre eine Alternative

!strpbrk($element, '1234567890') 

sein Es ist offensichtlich innerhalb der vorgesehene Verschluss.

1

Ich habe den folgenden Code getestet und es funktioniert. Es durchläuft das Array mit einer for-Schleife und wenn es eine Zeile mit href findet, die nicht leer ist, entfernt es das Element aus dem Array. Sie können unten sehen, dass ich das Array $category_1['children'] erstellt haben:

<?php 


$category_1['children'] = array(
    array('href' => 'j', 'name' => 'aa'), 
    array('href' => '', 'name' => 'bb'), 
    array('href' => 'j', 'name' => 'aa'), 
    array('href' => 'l', 'name' => 'aaas'), 
    array('href' => '', 'name' => 'aa'), 
    array('href' => '', 'name' => 'cc') 
); 

Jetzt ist es Zeit zu sortieren: Überprüfen Ergebnis

$array = $category_1['children']; 
for ($i=0; $i < count($category_1['children']); $i++) { 
    if($category_1['children'][$i]['href'] != null) { 
    unset($category_1['children'][$i]); 
    } 
} 

:

print_r($category_1['children']); 
0
<?php foreach ($category_1['children'] as $category_2) { 
     $str = $category_2['name']; 
     preg_match('!\d+!', $str, $matches); 
     if(empty($matches))){ 
     ?> 
     <li><a href="<?php echo $category_2['href']; ?>"><?php echo $category_2['name']; ?></a> 
    <?php } 
     }?> 

Preg Spiel prüft numerischer Wert im Kategorienamen und wenn keine numerischen Daten vorhanden sind, wird die Liste angezeigt. Hier

0

ist die einfache Art und Weise:

<?php foreach ($category_1['children'] as $category_2) { ?> 

<?php if(1 !== preg_match('~[0-9]~', $category_2['name'])){ ?> 

    <li><a href="<?php echo $category_2['href']; ?>"> 

     <?php echo $category_2['name']; ?></a></li> 

<?php } } ?> 
0

Sie einfach regex '/^[a-zA-Z ]*$/' verwenden können und einen Scheck auf sie setzen: z

<?php foreach ($category_1['children'] as $category_2) { 

    if(preg_match('/^[a-zA-Z ]*$/', category_2['name'])) {?> 

    <li><a href="<?php echo $category_2['href']; ?>"><?php echo $category_2['name']; ?></a></li> 

    <?php } 

} ?>