簡體   English   中英

在PHP中執行此foreach的更好方法?

[英]Better way to do this foreach in PHP?

是否有更好的方法來獲得與之相同的結果?

foreach($data['report']->result_array() as $k){
    $array[] = $k['id'];
}

更好:在這種情況下,意味着更短,更易於閱讀或總體上語法更好。

我是新手,歡迎編程社區的意見/建議/一般智慧!

我想不出更好的方法來實現這一目標。

當然,如果您能夠更改result_array()函數,則可以引入一個新參數以僅返回id字段。 但是,我認為這會降低代碼的可讀性。

如果只想從$ data ['report']加載ID,我建議定義一個新的專門方法,該方法返回所有ID

如果只想從$ data ['report']的每個元素上由result_array函數返回的數據數組中提取'id'字段並將其放入一個新數組中,那么這大概和您一樣高效可以得到。

您對此感到不安嗎? 如果我要處理的對象/數據結構對我來說很好(盡管我永遠不會將數組變量命名為“ $ array”-像$ idArray這樣的名稱更合適)。 就是說,我想它已經被適當地評論了,等等。

$array = array_map(function($k) { 
    return $k['id'];
}, $data['report']->result_array());

您僅限於在“循環”內執行單個操作,因此我不知道它是否符合“更好”的條件。 只是不同而已。

有些人喜歡編程的map / reduce風格,但是在PHP代碼中並不是很常見,因為語法不是很好,並且匿名函數只是最近才引入的。

編輯:刪除了有關速度比較的位。

這是一種更好的方法(至少我認為是更好的):

$reportIds = array();
$dataArray = $data['report']->result_array();

foreach($dataArray as $reportElement) {
    $reportIds[] = $reportElement['id'];
}

它使用了更有意義的變量名(我猜是這樣),並且對所發生的事情有些冗長。 請記住,除了正確性之外,可讀性比其他所有問題都重要。

當然,根據您正在執行的操作的需要,您還可以編寫一種方法來僅獲取id(以及result_array() )或迭代器來為您執行此操作:

class MultiDimensionalArrayIterator extends ArrayIterator {
    protected $key = '';

    public function __construct(array $array, $key) {
        $this->key = $key;
        parent::__construct($array);
    }

    public function current() {
        $data = parent::current();
        return $data[$this->key];
    }

    public function offsetGet($index) {
        $data = parent::offsetGet($index);
        return $data[$this->key];
    }

    // Implement other overrides to consistently handle iteration
}

用法:

$dataArray = $data['report']->result_array();
$iterator = new MultiDimensionalArrayIterator($dataArray, 'id');
$reportIds = iterator_to_array($iterator);

有很多可能性。 問題來了,您需要什么,其余項目需要什么...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM