php foreach多个数组超时

时间:2015-04-22 22:46:49

标签: php mysql arrays post foreach

有两个函数,一个是init函数,用于从数据库获取一些信息,然后将帐户信息传输到另一个函数,从远程网站获取数据,然后test_function_save_data()获取正确的数据并检查&安培;将它们插入数据库。

问题是:如果使用print_r($post)中的test_function_save_data(),该功能可以正常工作。但是删除此print_r或将其替换为sleep(),可以检查所有数据并将其插入数据库,但不会重定向当前页面并显示空白页。

所以,哪里出错了?怎么解决呢?

<?php
function test_function_get_account_init() {
    if(test_function_get_sns_account('blog')) {
        $b = 0;
        foreach (test_function_get_sns_account('blog') as $team_id => $blog_account_name) {
            $blog = test_theme_get_blog($team_id, $blog_account_name);
            if($blog && is_array($blog['posts'])){
                $b += test_function_save_data($blog['posts']);
            }
        }
        echo '<h5successfuly!</h5>';
    } else {
        echo 'not found.';
    }
}

function test_function_save_data($post_data) {
    set_time_limit(720);
    global $wpdb;
    $i = 0;
    foreach ($post_data as $post) {
        // echo '<div style="display:none;">';
        // print_r($post);
        // echo '</div>';
        if(test_function_check_post_unquine($post['social_origin_id']) && isset($post['social_origin_id'])) {
            $social_post_data = array(
                'post_title'    => $post['post_title'],
                'post_content'  => $post['post_content'],
                'post_status'   => 'publish',
                'post_author'   => get_current_user_id(),
                'post_type'     => 'social_post'
            );
            $latest_post_id = wp_insert_post( $social_post_data );
            if($post['social_origin_url']) {
                add_post_meta($latest_post_id, 'social_origin_url', $post['social_origin_url']);
            }
            if($post['social_origin_id']) {
                add_post_meta($latest_post_id, 'social_origin_id', $post['social_origin_id']);
            }
            if($post['user']) {
                add_post_meta($latest_post_id, 'social_origin_user', $post['user']);
            }
            if($post['user']['team_account']) {
                add_post_meta($latest_post_id, $post['user']['site_name'].'_social_user_id', $post['user']['team_account']);
            }
            if($post['media']) {
                add_post_meta($latest_post_id, 'social_origin_thumbnail', $post['media']['url']);
            }
            $i++;
        }
        flush();
    }
    return $i;
}

1 个答案:

答案 0 :(得分:0)

这看起来像wordpress代码?你有没有测试过print_r一个$ post?在某些框架中,大多数对象都是非常复杂的类的实例。对于前者在laravel中,如果您尝试print_r单个模型对象,它将导致大量数据,因此在循环中执行此操作可能会导致超时。通常有一种方法只能获取对象的属性。希望这有帮助,也许这应该是评论,但我的代表是不够的