Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的FOREACH循环在3次迭代后停止?(PHP&;Stripe)_Php_Arrays_Loops_Foreach_Stripe Payments - Fatal编程技术网

为什么我的FOREACH循环在3次迭代后停止?(PHP&;Stripe)

为什么我的FOREACH循环在3次迭代后停止?(PHP&;Stripe),php,arrays,loops,foreach,stripe-payments,Php,Arrays,Loops,Foreach,Stripe Payments,我的代码很大,因为我正在为WordPress开发订阅PHP插件。然而,尽管大部分工作已经完成,但我现在面临一个无法修复的小故障。这就是流程: 用户填写带有装运、账单和帐户详细信息的注册表单 我创建了他的帐户(WordPress) 确认后,我会调用\Stripe\Customer::create(),告知他的电子邮件和卡片详细信息 Stripe创建客户并将其作为JSON响应发送 我将stripecustomer对象转换为一个名为$Object(->\uu toArray(true))的数组,然后将

我的代码很大,因为我正在为WordPress开发订阅PHP插件。然而,尽管大部分工作已经完成,但我现在面临一个无法修复的小故障。这就是流程:

  • 用户填写带有装运、账单和帐户详细信息的注册表单
  • 我创建了他的帐户(WordPress)
  • 确认后,我会调用\Stripe\Customer::create(),告知他的电子邮件和卡片详细信息
  • Stripe创建客户并将其作为JSON响应发送
  • 我将stripecustomer对象转换为一个名为$Object(->\uu toArray(true))的数组,然后将每个字段插入到我的数据库中
  • 这就是我的梦想发挥作用的地方。我在foreach之前做了一个错误日志($object),只是为了确保我需要的一切都是正确的

        [26-Jan-2016 12:01:58 UTC] Array
        (
            [id] => cus_7n5hEVJs2btpg8
            [object] => customer
            [account_balance] => 0
            [created] => 1453809716
            [currency] => 
            [default_source] => card_17XVWCIh4e6dX4rQYJ8JzE7e
            [delinquent] => 
            [description] => 
            [discount] => 
            [email] => hello@xfsgfs.com
            [livemode] => 
            [metadata] => Array
                (
                )
    
            [shipping] => 
            [sources] => Array
                (
                    [object] => list
                    [data] => Array
                        (
                            [0] => Array
                                (
                                    [id] => card_17XVWCIh4e6dX4rQYJ8JzE7e
                                    [object] => card
                                    [address_city] => 
                                    [address_country] => 
                                    [address_line1] => 
                                    [address_line1_check] => 
                                    [address_line2] => 
                                    [address_state] => 
                                    [address_zip] => W12 8QQ
                                    [address_zip_check] => pass
                                    [brand] => Visa
                                    [country] => US
                                    [customer] => cus_7n5hEVJs2btpg8
                                    [cvc_check] => pass
                                    [dynamic_last4] => 
                                    [exp_month] => 1
                                    [exp_year] => 2019
                                    [fingerprint] => FIYdIZ89jqCdZ9G4
                                    [funding] => credit
                                    [last4] => 4242
                                    [metadata] => Array
                                        (
                                        )
    
                                    [name] => Lazhar Ich
                                    [tokenization_method] => 
                                )
    
                        )
    
                    [has_more] => 
                    [total_count] => 1
                    [url] => /v1/customers/cus_7n5hEVJs2btpg8/sources
                )
    
            [subscriptions] => Array
                (
                    [object] => list
                    [data] => Array
                        (
                        )
    
                    [has_more] => 
                    [total_count] => 0
                    [url] => /v1/customers/cus_7n5hEVJs2btpg8/subscriptions
                )
    
        )
    
    然而,通过每个$k/$v的foreach循环在两到三次迭代后停止,我的实际页面会给我一条Chrome错误消息“err\u empty\u response”

    [26-Jan-2016 11:58:02 UTC] id = cus_7n5diIO2wjeaYX
    [26-Jan-2016 11:58:02 UTC] object = customer
    
    我的实际循环是这样的:

        public function reconcile( $object = null, $action = null ) {
    
            $exists = $this->exists();
    
            if( $exists ) {
    
                if( !$object )
                    $object = $this->retrieve();
    
                if( !is_array( $object ) && !($object instanceof stdClass) )
                    $object = $object->__toArray( true );
    
                error_log( print_r( $object, true ) );
    
                foreach ( $object as $key => $value ) {
    
                    error_log( $key . ' = ' . $this->formatvalue( $value, false, true ) );
                    $this->$key = $this->formatvalue( $value, false, true );
    
                }
    
                error_log( 'update to be called next.' );
                $this->update();
            }
        }
    
        public function formatvalue( $value, $serialize = true, $nulltoemptystring = false ) {
    
            if( !isset( $value ) )
                return $nulltoemptystring ? '' : null;
    
            elseif( is_int( $value ) && $value == '0' )
                return 0;   
    
            elseif( is_array( $value ) )
                return $serialize ? serialize( $value ) : $value;
    
            elseif( is_bool( $value ) )
                return $value ? 1 : 0;
    
            elseif( trim( $value ) === '' )
                return '';
    
            else
                return $value;
        }
    
    我很困惑,为什么它会停在object(只是一个字符串)或account_balance(只是一个int,通常是0)上,而永远不会转到created和rest

    编辑:这是我整个错误日志的屏幕截图

    EDIT2:为了确保它与这些特定的数组键或值无关,我更改了代码,并且发生了相同的行为,在两次迭代后停止

    [26-Jan-2016 13:02:13 UTC] id = (string) cus_7n6fFVw0w3awiy
    [26-Jan-2016 13:02:13 UTC] created = (integer) 1453813333
    
    结果来自:

        if( $key != 'object' && $key != 'account_balance' ) {
            $v = $this->formatvalue( $value, false, true );
            error_log( $key . ' = (' . gettype( $v ) . ') ' . $v );
            $this->$key = $this->formatvalue( $value, false, true );
        }
    

    因此,它甚至与键或值无关……

    我认为问题在于函数formatvalue。 此函数不接受对象值

    试试这个:

    public function formatvalue( $value, $serialize = true, $nulltoemptystring = false ) {
    
        if( !isset( $value ) )
            return $nulltoemptystring ? '' : null;
    
        elseif( is_int( $value ) && $value == '0' )
            return 0;   
    
        elseif( is_array( $value ) || is_object( $value ) )
            return $serialize ? serialize( $value ) : $value;
    
        elseif( is_bool( $value ) )
            return $value ? 1 : 0;
    
        // you can replace by a simple trim
        return trim( $value );
    
        /*elseif( trim( $value ) === '' )
            return '';
    
        else
            return $value;*/
    }
    

    我认为问题在于函数formatvalue。 此函数不接受对象值

    试试这个:

    public function formatvalue( $value, $serialize = true, $nulltoemptystring = false ) {
    
        if( !isset( $value ) )
            return $nulltoemptystring ? '' : null;
    
        elseif( is_int( $value ) && $value == '0' )
            return 0;   
    
        elseif( is_array( $value ) || is_object( $value ) )
            return $serialize ? serialize( $value ) : $value;
    
        elseif( is_bool( $value ) )
            return $value ? 1 : 0;
    
        // you can replace by a simple trim
        return trim( $value );
    
        /*elseif( trim( $value ) === '' )
            return '';
    
        else
            return $value;*/
    }
    

    1) 这显然是正确的数组,因为我在循环之前打印它,这正是我想要的2)问题发生在foreach循环中,因为它停止后没有代码执行。所以你不会得到
    错误日志
    来在你的foreach中创建日志吗?是否得到执行?@CodeGodie我得到了,但只有两次:[26-Jan-2016 11:58:02 UTC]id=cus_7n5diIO2wjeaYX[26-Jan-2016 11:58:02 UTC]object=customerid表示问题在于您的
    格式值()
    func.手动测试每个条件,看看它产生了什么。@Lazhar您能提供JSON响应的
    var\u dump
    而不首先将其转换为数组吗?我想看看您得到的实际响应。1)在循环之前打印它时,它显然是正确的数组,这正是我想要的2)问题em发生在foreach循环中,因为停止后没有执行任何代码。因此,在foreach中创建日志时,您不会得到
    错误日志
    ?是否得到执行?@CodeGodie我得到了,但只得到了两次:[26-Jan-2016 11:58:02 UTC]id=cus_7n5diIO2wjeaYX[26-Jan-2016 11:58:02 UTC]object=customerid表示问题在于
    formatvalue()
    func.手动测试每个条件,看看它产生了什么。@Lazhar你能提供JSON响应的
    var\u dump
    ,而不首先将其转换为数组吗?我想看看你得到的实际响应。我试过了,同样的事情发生了,我添加了整个错误的屏幕截图\u LogI也用simi测试这个函数lar条带对象(不是客户,而是订阅),它工作得很好。在这种情况下,它只是阻塞,我真的不明白为什么,因为没有错误消息:/i我尝试了,但发生了同样的事情,我添加了整个错误的屏幕截图\u LogI也使用类似的条带对象(不是客户,而是订阅)测试此功能它工作得很好。在这种情况下它只是阻塞,我真的不明白为什么,因为没有错误消息:/