Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Multidimensional Array - Fatal编程技术网

PHP多维数组操作

PHP多维数组操作,php,multidimensional-array,Php,Multidimensional Array,这是我的阵列 Array ( [0] => Array ( [sample_id] => 3 [time] => 2010-05-30 21:11:47 ) [1] => Array ( [sample_id] => 2 [time] => 2010-05-30 21:11:47 )

这是我的阵列

Array
(
    [0] => Array
        (
            [sample_id] => 3
            [time] => 2010-05-30 21:11:47
        )

    [1] => Array
        (
            [sample_id] => 2
            [time] => 2010-05-30 21:11:47
        )

    [2] => Array
        (
            [sample_id] => 1
            [time] => 2010-05-30 21:11:47
        )
)
我想在一个数组中获得所有的样本ID。有人能帮忙吗


这可以在没有for循环的情况下完成吗(因为数组非常大)。

这是我多次遇到的问题。在PHP中,没有一种简单的方法可以展平数组。您必须将它们循环添加到另一个数组中。如果失败,请重新考虑如何使用数据以使用原始结构,而不需要展平

编辑:我想我应该添加一些度量信息,我创建了一个数组
$data=array(array('key'=>value,'value'=>other_value),…)其中我的数组中有150000个元素。我用了3种典型的展平方法

$start = microtime();
$values = array_map(function($ele){return $ele['key'];}, $data);
$end = microtime();
生成的运行时间为:
运行时间:0.304405
运行5次,平均时间略低于0.30

$start = microtime();
$values = array();
foreach ($data as $value) {
    $values[] = $value['key'];
}
$end = microtime();
生成的运行时间为
运行时间:0.167301
,平均值为0.165

$start = microtime();
$values = array();
for ($i = 0; $i < count($data); $i++) {
    $values[] = $data[$i]['key'];
}
$end = microtime();

这是我遇到过很多次的问题。在PHP中,没有一种简单的方法可以展平数组。您必须将它们循环添加到另一个数组中。如果失败,请重新考虑如何使用数据以使用原始结构,而不需要展平

编辑:我想我应该添加一些度量信息,我创建了一个数组
$data=array(array('key'=>value,'value'=>other_value),…)其中我的数组中有150000个元素。我用了3种典型的展平方法

$start = microtime();
$values = array_map(function($ele){return $ele['key'];}, $data);
$end = microtime();
生成的运行时间为:
运行时间:0.304405
运行5次,平均时间略低于0.30

$start = microtime();
$values = array();
foreach ($data as $value) {
    $values[] = $value['key'];
}
$end = microtime();
生成的运行时间为
运行时间:0.167301
,平均值为0.165

$start = microtime();
$values = array();
for ($i = 0; $i < count($data); $i++) {
    $values[] = $data[$i]['key'];
}
$end = microtime();
或在早期版本中:

function get_sample_id($el){return $el["sample_id"];}
$ids = array_map('get_sample_id', $array);
然而,这可能不会更快

或在早期版本中:

function get_sample_id($el){return $el["sample_id"];}
$ids = array_map('get_sample_id', $array);

但是,这可能不会更快。

我认为如果没有循环,您将不会有任何运气。如果你真的不想重复整个结构,我会考虑寻找一种改变你的环境的方法… 能否在创建较大数组的同时生成样本id数据结构


您真的需要一个样本id条目数组吗,或者这只是达到目的的一种手段?也许有一种方法可以将数据封装在一个类中,该类使用缓存和游标来避免在您只需要某些部分时重复整个过程?

如果没有循环,我认为您不会有任何运气。如果你真的不想重复整个结构,我会考虑寻找一种改变你的环境的方法… 能否在创建较大数组的同时生成样本id数据结构


您真的需要一个样本id条目数组吗,或者这只是达到目的的一种手段?也许有一种方法可以将数据封装在一个类中,该类使用缓存和游标来避免在只需要某些片段时重复整个过程。

没有循环就无法完成任何数组操作。
如果看不到循环,并不意味着它不存在。 我可以做一个函数

array_summ($array) {
  $ret=0;
  foreach ($array as $value) $ret += $value;
  return $ret;
}
然后调用它
array\u summ($arr)
,而不使用任何可见循环。但是不要被这个愚弄了。有一个循环。每个php数组函数也迭代数组。你就是看不到

因此,您必须寻找的真正解决方案不是神奇的函数,而是减少这些数组。
从哪里来的?最有可能来自数据库。
考虑做一个数据库来做所有的计算。
它将比函数中的任何PHP bulit节省更多的时间

没有循环就无法完成任何数组操作。
如果看不到循环,并不意味着它不存在。 我可以做一个函数

array_summ($array) {
  $ret=0;
  foreach ($array as $value) $ret += $value;
  return $ret;
}
然后调用它
array\u summ($arr)
,而不使用任何可见循环。但是不要被这个愚弄了。有一个循环。每个php数组函数也迭代数组。你就是看不到

因此,您必须寻找的真正解决方案不是神奇的函数,而是减少这些数组。
从哪里来的?最有可能来自数据库。
考虑做一个数据库来做所有的计算。
它将比任何PHP内置函数节省更多的时间

非常好,但需要PHP5.3一个有趣的想法,它仍然使用PHP优化的低级函数“循环”数组。太棒了!这就是我所做的,但我写了一个函数,然后在那里添加了一个回调,我们可以直接在参数中编写函数,这从来都不是什么新鲜事:)干杯@ThiefMaster:如果你定义了一个“普通”函数,也可以在PHP<5.3中完成。这基本上是一个
for
循环,但是隐藏。非常好,但是需要PHP5.3一个有趣的想法,它仍然使用PHP优化的低级函数“循环”数组。太棒了!这就是我所做的,但我写了一个函数,然后在那里添加了一个回调,我们可以直接在参数中编写函数,这从来都不是什么新鲜事:)干杯@ThiefMaster:如果您定义了一个“普通”函数,也可以在PHP<5.3中完成。这基本上是一个
for
循环,但实际上是隐藏的
array\u map
通常不会比foreach循环快,因为它需要为数组的每个元素调用userland函数。我想看看单独的回调(即下面的“get\u sample\u id”)是如何叠加的。这需要做一个字符串->函数查找,而lambda解决方案则是神奇的
array\u map
通常不会比foreach循环快,因为它需要为数组的每个元素调用userland函数。我想看看单独的回调(即下面的“get\u sample\u id”)是如何叠加的。这需要执行字符串->函数查找,而lambda解决方案则是一个神奇的解决方案。为此,我必须对数据库进行两次查询,一次用于提取大数组,另一次用于提取示例ID。您的数据库查询是否返回一个巨大的关联数组,或者您是通过循环结果集来构建那个大数组?如果是后者,则