2015-10-14 4 views
0

У меня есть список переменных, мне нужно, чтобы создать таким образом:Php петля для создания переменных

$meta_2_length = get_post_meta(get_the_ID(), 'meta-2-length', true); 
$meta_2_loft = get_post_meta(get_the_ID(), 'meta-2-loft', true); 
$meta_2_lie = get_post_meta(get_the_ID(), 'meta-2-lie', true); 
$meta_2_bounce = get_post_meta(get_the_ID(), 'meta-2-bounce', true); 

мне нужно сделать это для чисел 2 - 14 так что я понял, что лучший способ будет цикл. Я новичок в php, но хочу писать как можно более чистым. Я думал, что это может работать:

for($i = 0; $i <= 14; $i++) { 
    ${"meta_$i_length"} = "get_post_meta(get_the_ID(), 'meta-$i-length', true);"; 
} 

, но когда он не кажется, что работает, когда я echo $meta_3_length

+0

числовые переменные, как это почти всегда ошибаются. Для этого нужны массивы. – Barmar

ответ

0

использовать массив associativer массивов.

$metas = array(); 
$id = get_the_ID(); 
for ($i = 0; $i <= 14; $i++) { 
    $metas[] = array(
     'length' => get_post_meta($id, "meta-$i-length", true), 
     'loft' => get_post_meta($id, "meta-$i-loft", true), 
     'lie' => get_post_meta($id, "meta-$i-lie", true), 
     'bounce' => get_post_meta($id, "meta-$i-bounce", true) 
    ); 
} 

Теперь вы можете сделать echo $metas[3]['length'];.

+0

Работал идеально и чистый. Также дает мне лучшее представление о том, как настроить переменные PHP, как я бы в JS – Packy

0

Моя рекомендация для вас создать массив. И дайте значения массива в цикле.

пример

$foo = array();  
for($i = 0; $i <= 14; $i++) { 
    $foo[] = "get_post_meta(get_the_ID(), 'meta-$i-length', true);"; 
} 

затем эхо данных с помощью массива

+0

Почему вы поставили вызов 'get_post_meta' в кавычки? – Barmar

+0

Если я использую это (без qoutes вокруг 'get_post_meta'), и я повторяю его как' 'Я ничего не получаю. – Packy

0

Вы можете использовать variable variables:

for($i = 0; $i <= 14; $i++) { 
    $varname = "meta_$i_length"; 
    $$varname = get_post_meta(get_the_ID(), 'meta-$i-length', true); 
} 
0

Вы можете использовать extract с ассоциативным массивом:

$arr = []; 
for($i = 0; $i <= 14; $i++) { 
    $arr["meta_{$i}__length"] = get_post_meta(get_the_ID(), "meta-{$i}-length", true); 
} 
extract($arr); 

Затем вы можете сделать echo $meta_3__length и получить результат вызова функции get_post_meta(get_the_ID(), "meta-3-length', true);

Я надеюсь, что это помогает

Смежные вопросы