在Foreach循环中,如果元值不存在,我如何添加它?

时间:2020-02-18 作者:Curtis B

我确信我遗漏了一些明显的东西,但是如果这个元值在foreach循环中还不存在,我怎么能让这个函数添加一个元值呢?

你也可以在这里的评论中看到我的一些想法。

php
global $wpdb;
$order_id = $order_data["id"];
$names = array();
$unique_ids = array();
$new_ticket_links = array();
$base_ticket_path = esc_url( home_url( \'/\' ) . \'tickets_download/\');
$ticketidmeta = \'_tribe_ext_pdf_tickets_unique_id\';
$table_name = $wpdb->prefix . "postmeta";
$db_data = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $table_name WHERE `meta_value` LIKE $order_id AND post_id <> $order_id");

if (!empty($db_data)) {
foreach ($db_data as $value) {
    $names[] = $value->post_id;
  }
} 
if (!empty($names)) {
foreach ($names as $val) {
  $unique_ids[] = get_post_meta($val, $ticketidmeta, false);

  // If the unique_id isn\'t there, create it
  if ( empty( $unique_ids ) ) {

    /*
     *  I\'ve played with a foreach loop here as well
     *  The results are spotty - doesn\'t seem to work.
     */ 
        // foreach ($names as $val) {

        $unique_id = uniqid( \'\', true );
        // uniqid() with more_entropy results in something like \'59dfc07503b009.71316471\'
        $unique_id = str_replace( \'.\', \'\', $unique_id );

        $unique_id = sanitize_file_name( $unique_id );

        add_post_meta( $val, $ticketidmeta, $unique_id, true );

      // }
  }
}
foreach ($unique_ids as $unique_id) {
  $new_ticket_links[] = $base_ticket_path . implode($unique_id);
  }
}

1 个回复
SO网友:Curtis B

我的问题是想一下子做太多。在主foreach循环中:

if (!empty($names)) {
  foreach ($names as $val) {

     // Get the pdf\'s unique_id if it\'s in the db already
     $unique_id = get_post_meta($val, $ticketidmeta, false);

     // If the unique_id isn\'t there, create it
     if ( empty( $unique_id ) ) {
        $unique_id = uniqid( \'\', true );
        // uniqid() with more_entropy results in something like \'59dfc07503b009.71316471\'
        $unique_id = str_replace( \'.\', \'\', $unique_id );

        $unique_id = sanitize_file_name( $unique_id );

        add_post_meta( $val, $ticketidmeta, $unique_id, true );
     }

     // Use that unique id to make the ticket path
     $ticketurl = sprintf( $base_ticket_path . sprintf(implode($unique_id)));

     // Add each unique id to an array
     $uniqueIDs[] = $ticketurl;
   }
}
$attendees_data = sprintf(implode($uniqueIDs));
在我最初的问题中,我试图在foreach的第一条语句中设置最终数组,检查元数据是否存在,并将该元数据分配给最终数组中的值。

相反,现在对于每个$val,我们首先尝试获取post元数据,然后如果它不存在,我们创建它,然后对该元数据进行一些结构化,然后将其分配给最终的数组变量。

从最后一行可以看出,这个项目还有更多的工作要做,但感谢所有试图提供帮助的人!

相关推荐

将变量或变量占位符从编辑器传递到PHP

我正在为我的客户构建一种方法,以构建一个要用wp\\U mail发送的消息内容。在此范围内,我希望他们能够选择变量,例如,在我的管理自定义字段中,消息可能如下所示:电子邮件:$Email\\u地址$名字:$First\\u Name$因此,当我遍历这些行时,我可以发现一个变量占位符,并用我的变量替换$email\\u address$,因此我的PHP看起来像:$body = \'Email Address: [email protected]<br>First Name: Mickey Mouse\