Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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
在PHP中实现此功能的更好方法?_Php_Arrays_Foreach - Fatal编程技术网

在PHP中实现此功能的更好方法?

在PHP中实现此功能的更好方法?,php,arrays,foreach,Php,Arrays,Foreach,有没有更好的方法来获得与此相同的结果 foreach($data['report']->result_array() as $k){ $array[] = $k['id']; } 更好:在这个上下文中,意思是更短、更容易阅读,或者总体上更好的语法 我是一个noob,所以欢迎来自编程社区的评论/建议/一般智慧 如果您只是想从$data['report']的每个元素上的result_array函数返回的数据数组中提取'id'字段,并将其放入一个新数组中,那么这可能是您所能获得的最有效

有没有更好的方法来获得与此相同的结果

foreach($data['report']->result_array() as $k){
    $array[] = $k['id'];
}
更好:在这个上下文中,意思是更短、更容易阅读,或者总体上更好的语法


我是一个noob,所以欢迎来自编程社区的评论/建议/一般智慧

如果您只是想从$data['report']的每个元素上的result_array函数返回的数据数组中提取'id'字段,并将其放入一个新数组中,那么这可能是您所能获得的最有效的方法


你觉得这有什么麻烦吗?虽然我从来没有给数组变量命名为$array,但在我看来这很好——如果必须处理的是对象/数据结构,那么类似$idArray的东西似乎更合适。也就是说,我认为它已经被适当地注释了,等等。

如果您只是想从$data['report']的每个元素上的result_数组函数返回的数据数组中提取'id'字段,并将其放入一个新数组中,那么这可能是最有效的


你觉得这有什么麻烦吗?虽然我从来没有给数组变量命名为$array,但在我看来这很好——如果必须处理的是对象/数据结构,那么类似$idArray的东西似乎更合适。也就是说,我认为这是适当的评论,等等。

我想不出更好的方法来实现这一点

当然,如果您能够更改result_数组函数,则可以引入一个新参数来仅返回id字段。 然而,在我看来,这降低了代码的可读性


如果您只想从$data['report']加载id,我建议定义一个新的专门方法,返回所有id。

我想不出更好的方法来实现这一点

当然,如果您能够更改result_数组函数,则可以引入一个新参数来仅返回id字段。 然而,在我看来,这降低了代码的可读性

如果您只想从$data['report']加载id,我建议定义一个新的专门方法来返回所有id

你只能在循环中做一件事,所以我不知道它是否更好。只是不同而已

有些人更喜欢map/reduce风格的编程,但这在PHP代码中并不常见,因为语法不是很好,匿名函数只是最近才引入的

编辑:删除了有关速度比较的位

你只能在循环中做一件事,所以我不知道它是否更好。只是不同而已

有些人更喜欢map/reduce风格的编程,但这在PHP代码中并不常见,因为语法不是很好,匿名函数只是最近才引入的


编辑:删除了关于速度比较的部分。

这里有一个更好的方法,至少是我认为更好的方法:

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

foreach($dataArray as $reportElement) {
    $reportIds[] = $reportElement['id'];
}
我猜,它使用了更有意义的变量名,并且对发生的事情更加详细。记住,除了正确性之外,可读性胜过所有其他问题

当然,根据您正在做的工作的需要,您还可以编写一个方法来仅获取边result_数组中的ID,或者编写一个迭代器来为您执行此操作:

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);

有很多可能性。问题在于你需要什么,以及你的项目的其他部分需要什么…

这里有一个更好的方法,至少是我认为更好的方法:

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

foreach($dataArray as $reportElement) {
    $reportIds[] = $reportElement['id'];
}
我猜,它使用了更有意义的变量名,并且对发生的事情更加详细。记住,除了正确性之外,可读性胜过所有其他问题

当然,根据您正在做的工作的需要,您还可以编写一个方法来仅获取边result_数组中的ID,或者编写一个迭代器来为您执行此操作:

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);

有很多可能性。问题来了,你需要什么,你的项目的其他部分需要什么…

@Kevin Brown:-缓慢的掌声,所以我呼吁你在这个问题上似乎有无限的智慧。@Schraspel上校-我更喜欢有幽默感的人,而不是那些俯视他们的人。“我们来这里是为了帮助人们,而不是侮辱他们。”斯帕奈尔上校:我确实认为更短、更容易阅读是一种进步。很明显,他只是很难理解这段代码在做什么,他希望看到一些替代语法可以做同样的事情。如果我在提出要求后没有得到我需要的澄清,我就转到另一个问题。其他人似乎能回答这个问题。@凯文·布朗:-掌声慢,所以我呼吁你在这个问题上似乎有无限的智慧。@Shrapnel上校-我更喜欢有幽默感的人,而不是那些低头看他们的人。“我们是来帮助人们的,而不是侮辱他们的。”斯帕奈尔上校:我确实认为这更简短、更容易

读书是一种进步。很明显,他只是很难理解这段代码在做什么,他希望看到一些替代语法可以做同样的事情。如果我在提出要求后没有得到我需要的澄清,我就转到另一个问题。其他人似乎能够回答这个问题。我是一个完全的php noob自学者…所以我不完全理解参数、方法、对象等的工作原理…我尝试了result_array方法,但没有成功…我只是试图从“report”数组中取出id数组,仅此而已…好吧,我是个十足的php高手,自学成才……所以我不完全了解参数、方法、对象等的工作原理……我尝试了result_数组方法,但没有奏效……我只是想把id数组从“report”数组中去掉,仅此而已……我没有投反对票,但这绝对不是更快、更短、更容易阅读,等等:@Col.Shrapnel,哈哈。我已经测试过了,对于这个微不足道的循环,array_map肯定要慢一些@webbiedave,考虑到PHP的语法,我同意。它既不快也不慢。这是平等的。对于99.999%的脚本中处理的少量数据来说,这是完全可以忽略不计的。如果你碰巧处理了大量的数据,你必须在达到这个目标之前找到一个地方进行优化loop@Col.弹片,我完全同意这样的想法,这不是你应该关注的优化类型。通过使用PHP,您已经决定速度不是决定性因素。但在可读性方面,有些人实际上更喜欢map/reduce/filter技术。虽然,我怀疑他们中的许多人使用PHP,因为它的语法很难看。事实上,PHP非常快。Alexa排名前100位的大多数网站都是用php构建的。速度对他们来说非常重要。但代码本身的速度是最不重要的。它经过了很好的优化,从未成为瓶颈。但是数据操作的速度是优化的主题。我没有否决,但这绝对不是更快、更短、更容易阅读,等等:@Col.Shrapnel,哈哈。我已经测试过了,对于这个微不足道的循环,array_map肯定要慢一些@webbiedave,考虑到PHP的语法,我同意。它既不快也不慢。这是平等的。对于99.999%的脚本中处理的少量数据来说,这是完全可以忽略不计的。如果你碰巧处理了大量的数据,你必须在达到这个目标之前找到一个地方进行优化loop@Col.弹片,我完全同意这样的想法,这不是你应该关注的优化类型。通过使用PHP,您已经决定速度不是决定性因素。但在可读性方面,有些人实际上更喜欢map/reduce/filter技术。虽然,我怀疑他们中的许多人使用PHP,因为它的语法很难看。事实上,PHP非常快。Alexa排名前100位的大多数网站都是用php构建的。速度对他们来说非常重要。但代码本身的速度是最不重要的。它经过了很好的优化,从未成为瓶颈。但是数据操作的速度是优化的主题。我可以打听一下吗?当需要一个对象的特定数组时,foreach是最好的方法吗?是的,当然。精化:开发人员很容易阅读,而且在大多数情况下,它的性能非常好。我不会-1,但我不喜欢专用的getIdArray方法。对我来说,这只是一种膨胀的味道,因为为什么不为这一类的数组和计算的每个排列添加方法呢。为什么不创建一个与数组一起工作的helper实用程序类来解决这个问题呢。这样您就可以直接重用解决方案,而无需复制和粘贴。。。我想这是更好的方法,但这只是一个opinion@rtuin:那很公平。这就是为什么我没有——1,这是解决问题的有效方法,如果不知道更多,它可能是正确的方法。我只是指出一个可能的理由来避免…我可以打听一下吗?当需要一个对象的特定数组时,foreach是最好的方法吗?是的,当然。精化:开发人员很容易阅读,而且在大多数情况下,它的性能非常好。我不会-1,但我不喜欢专用的getIdArray方法。对我来说,这只是一种膨胀的味道,因为为什么不为这一类的数组和计算的每个排列添加方法呢。为什么不创建一个与数组一起工作的helper实用程序类来解决这个问题呢。这样您就可以直接重用解决方案,而无需复制和粘贴。。。我想这是更好的方法,但这只是一个opinion@rtuin:那很公平。这就是为什么我没有——1,这是解决问题的有效方法,如果不知道更多,它可能是正确的方法。我只是指出一个可能的理由来避免。。。