0

配列ループの現在の位置内に、さらに 1 つ以上の要素が残っているかどうかを確認したい (要素をシフトしたりカウントしたりせずに):

public function build() {
    $_string = 'CREATE TABLE IF NOT EXISTS `' . dbbuilder::$prefix . $this->name . '` (';
    foreach( $this->rows as $key => $row ) {
        if( $__string = $row->get_string() ) {
            $_string .= $__string . ( next( $this->rows[$key] ) ? ', ' : '' );
        }
    }
    $_string .= ') ENGINE=InnoDB  DEFAULT CHARSET=utf8;';
    $this->string = $_string;
}

出力:

[string:private] => CREATE TABLE IF NOT EXISTS `ecom_accounts` (`id` init(11) NOT NULL  AUTO_INCREMENT`name` varchar(55) NOT NULL `email_address` varchar(255) NOT NULL `password` varchar(32) NOT NULL `multisite` varchar(5) NOT NULL `roll` int(4) NOT NULL DEFAULT '0') ENGINE=InnoDB  DEFAULT CHARSET=utf8;

next() は機能すると思いましたkeyが、機能しません。また、数値ではなく文字列です。

4

3 に答える 3

2

簡単なものはどうですか?

$_string = 'CREATE TABLE IF NOT EXISTS `' . dbbuilder::$prefix . $this->name . '` (';
$tmp=array();
foreach( $this->rows as $key => $row )
   if( $__string = $row->get_string() )
      $tmp[]=$__string;
$_string .= implode(',',$tmp);
$_string .= ') ENGINE=InnoDB  DEFAULT CHARSET=utf8;';
$this->string = $_string;
于 2012-09-07T19:29:50.077 に答える
2

たとえば、CachingIteratorを使用できます

<?php
$source = array(1,2,3,4,5,6);
$cit = new CachingIterator(new ArrayIterator($source));

foreach($cit as $e) {
    if ( !$cit->hasNext() ) {
        echo 'last element: ';
    }
    echo $e, "\n";
}

版画

1
2
3
4
5
last element: 6

...またはこの場合は単純なjoin(', ', $this->rows)

于 2012-09-07T19:26:54.043 に答える
1

これは仕事をすることができます。唯一の問題: 最後の位置にいて、次のキーがない場合はどうすればよいですか?

public function build() {
    $_string = 'CREATE TABLE IF NOT EXISTS `' . dbbuilder::$prefix . $this->name . '` (';
    $keys = array_keys($this->rows);
    $i = 1;
    foreach( $this->rows as $key => $row ) {
        if( $__string = $row->get_string() ) {
            $_string .= $__string . $this->rows[$keys[$i]] ) ? ', ' : '' );
        }
        $i++;
    }
    $_string .= ') ENGINE=InnoDB  DEFAULT CHARSET=utf8;';
    $this->string = $_string;
}
于 2012-09-07T19:28:41.500 に答える