我使用WordPress的,有一個自定義後類型的設置與選擇一組號碼,與基本的細分是這樣的:PHP添加到兒童陣列
- 30" 圓桌會議
- 自助
- 雞尾酒
- 甜品
- 宴會臺
- 自助
- 禮品
- DJ表
我試圖收集所有物品進入分組的集合,用於<optgroup />
使用,以顯示自助下的所有表,所有在雞尾酒等等如下:
- 自助餐
- 30" 圓桌會議
- 宴會桌
- 雞尾酒
- 宴會桌
[等等]
PHP的問題我米跑到是我有一個桅杆呃數組,其中包含所有類型(自助餐,雞尾酒等)以及稱爲tables
的(初始)空數組元素,以便添加支持該特定類型的所有表。從ACF中檢索選項可以正常工作,就像從WordPress檢索單個帖子一樣,所以這是嚴格的打包問題,以JSON的形式反彈回來。下面是一個代碼示例:
//gets the field associated with the different table types (Buffet, Cocktail, etc.)
$field = get_field_object('field_577ff065e6699');
$list = array();
//create the base array
foreach ($field["choices"] as $type) {
$list[] = array
(
"type" => $type, //Buffet, Cocktail, etc.
"tables" => array() //placeholder to add WP items
);
}
//now get all tables
$tablesQuery = new WP_Query(array('post_type' => 'table', 'posts_per_page' => -1, 'order' => 'ASC'));
//loop through and add the table(s) to their categories
while ($tablesQuery->have_posts()) : $tablesQuery->the_post();
//gets the types supported by this table
$tableTypes = get_field('options');
//individual types
foreach ($tableTypes as $tableType) {
//all types
foreach ($list as $supportedType) {
//see if there is a match and add it
if ($tableType == $supportedType["type"]) {
//add to the array since it matches
$table = array
(
"name" => get_the_title(),
"sqft" => (int)get_field('square_footage'),
"seats" => (int)get_field('seats')
);
array_push($supportedType["tables"], $table);
//shows the single table above, but nothing prior
print_r($supportedType);
}
}
}
endwhile;
wp_reset_postdata();
//all "tables" arrays are empty here
var_dump($list);
的print_r($supportedType)
輸出上述最終顯示的所有數據,然而,tables
條目總是當它應該是多個只有一個元素:
Array
(
[type] => Buffet
[tables] => Array
(
[0] => Array
(
[name] => 30」 Round Bistro/Cocktail Table
[sqft] => 42
[seats] => 2
)
)
)
Array
(
[type] => Cake
[tables] => Array
(
[0] => Array
(
[name] => 30」 Round Bistro/Cocktail Table
[sqft] => 42
[seats] => 2
)
)
)
[.. snip ..]
最後,當我在最後做var_dump($list)
,所有類型的出現,但它們的相關tables
陣列都是空的:
array(11) {
[0]=>
array(2) {
["type"]=>
string(6) "Buffet"
["tables"]=>
array(0) {
}
}
[1]=>
array(2) {
["type"]=>
string(4) "Cake"
["tables"]=>
array(0) {
}
}
這讓我完全失去了知覺,儘管它必須是令人難以置信的基本的東西,我錯過了。任何想法爲什麼tables
是空的,儘管在環狀物品上使用array_push
?我也試過$supportedType["tables"][] = $table
,但是這個效果相同。
'$ supportedType'是foreach'的'迭代變量,所以它每次通過循環重新分配到'$ list'數組的當前元素。它也是元素的副本,所以推送到它不會影響原始'$ list'元素。 – Barmar
啊,這是一個副本!只要你這麼說,我知道它需要一個參考變量,在它前面增加一個'&',並且繁榮 - 完美。 @Barmar - 如果你想添加你的答案作爲答案,我會將其標記爲正確的。 – RubyHaus
我以前回答過類似的問題,我把它作爲重複鏈接。 – Barmar