Încerc să creez un array cu o buclă foreach, dar array-ul salvează doar ultimul element

10 feb. 2017, 20:44:52
Vizualizări: 38.8K
Voturi: 0

Codul meu este:

<?php
//Obține postările după argumentele salvate în array-ul $args
$vendor_postlist = get_posts( $args );

// Parcurge lista de postări obținute și pentru fiecare postare extrage categoria produsului și o salvează într-un array
foreach ( $vendor_postlist as $post ){  

$terms = get_the_terms( $post->ID, 'product_cat' );
$categories = array();

foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}

unset( $term );
}

unset( $post );
print_r($categories);
?>

Câteva informații de context: Încerc să creez un shortcode care va afișa o listă de produse (WooCommerce) într-un tabel. Astfel, $args stochează argumentele precum autorul postării, tipul postării etc, unele dintre ele fiind extrase din atributele shortcode-ului.

Problema pare să fie în a doua buclă foreach:

foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}

Echo-ul este doar pentru a verifica dacă afișează corect termenii pe care ar trebui să îi afișeze în acest punct. Și într-adevăr, lista de termeni afișată este corectă.

Exemplu: Fructe, Legume, Flori

Dar când folosesc print_r($categories) - care ar fi trebuit să afișeze un array cu cele trei categorii - doar ultima categorie pare să fi fost stocată în array: Array ( [0] => Flori)

Am nevoie să generez un tabel pentru fiecare categorie, de aceea încerc să creez array-ul de categorii, dar m-am blocat în acest punct, neavând idee ce ar putea fi greșit.

Dacă cineva știe, vă rog să-mi spuneți. Aș fi foarte fericit să rezolv această problemă. Mulțumesc!

0
Toate răspunsurile la întrebare 1
2

Încearcă acest cod. Este necesar să anulezi acele array-uri în foreach? Anularea în interiorul buclei va elimina valorile anterioare ale array-ului.

<?php
    // Obține postările folosind argumentele salvate în array-ul $args
    $vendor_postlist = get_posts( $args );
    $categories = array();
    // Parcurge lista de postări obtinută.....
    foreach ( $vendor_postlist as $post ){  

    $terms = get_the_terms( $post->ID, 'product_cat' );


    foreach ( $terms as $term ) {
    $categories[] = $term->name;
    echo $term->name;
    }

    }

    print_r($categories);
    ?>
10 feb. 2017 20:53:36
Comentarii

Mulțumesc, Abdul! Ai dreptate! Mutând linia: $categories = array(); înainte de prima buclă rezolvă problema! Acum array-ul stochează toate cele 3 elemente. Arată cât de inexperimentat sunt în codare.

Ami Ami
11 feb. 2017 01:03:00

A, și legat de unset: am testat și se pare că nu există nicio diferență dacă le folosesc sau nu. Mulțumesc mult pentru răspunsul tău util!

Ami Ami
11 feb. 2017 01:07:40