Php 查找具有最大或最小子数组元素值的数组元素
以下数组的元素1表示Php 查找具有最大或最小子数组元素值的数组元素,php,arrays,Php,Arrays,以下数组的元素1表示x值最大的元素,元素2表示x元素最小的元素 如果不使用PHP代码在每个数组上循环,如何确定具有最大和最小x的元素的索引 $array = [ ['x'=>5,'y'=>3], ['x'=>9,'y'=>3], ['x'=>3,'y'=>3], ['x'=>7,'y'=>3] ]; 提取x列并计算它: $x = array_column($array, 'x'); $min = min($x);
x
值最大的元素,元素2表示x
元素最小的元素
如果不使用PHP代码在每个数组上循环,如何确定具有最大和最小x
的元素的索引
$array = [
['x'=>5,'y'=>3],
['x'=>9,'y'=>3],
['x'=>3,'y'=>3],
['x'=>7,'y'=>3]
];
提取
x
列并计算它:
$x = array_column($array, 'x');
$min = min($x);
$max = max($x);
或者,正如JustOnUnderMillions所指出的:
list($min, $max) = [min($x=array_column($array, 'x')), max($x)];
要获取包含该值的数组的索引,只需使用array\u search()
。如果有多个相同的值,它将返回第一个键:
$x = array_column($array, 'x');
$min = array_search(min($x), $x, true);
$max = array_search(max($x), $x, true);
PHP>=5.5.0需要
array\u column()
或使用提取x
列并计算:
$x = array_column($array, 'x');
$min = min($x);
$max = max($x);
或者,正如JustOnUnderMillions所指出的:
list($min, $max) = [min($x=array_column($array, 'x')), max($x)];
要获取包含该值的数组的索引,只需使用array\u search()
。如果有多个相同的值,它将返回第一个键:
$x = array_column($array, 'x');
$min = array_search(min($x), $x, true);
$max = array_search(max($x), $x, true);
PHP>=5.5.0需要
array\u column()
或使用请使用list()
最终获得一行代码;-)没有array\u column()
的答案不是正确答案吗P您还可以包括一个简单的foreach循环,OP只需要迭代数组一次。实际上,我正在尝试获取元素的索引(即1表示最大值,2表示最小值),而不是值。@Rizier123当然,array\u map
withfunction($a)use(&$min,&max){}
也可以使用。也许这项任务有点容易@用户1032531 Opps,但没有人看到它像这样!为此,您需要另一个代码段。请使用list()
最终获得一行代码;-)没有array\u column()
的答案不是正确答案吗P您还可以包括一个简单的foreach循环,OP只需要迭代数组一次。实际上,我正在尝试获取元素的索引(即1表示最大值,2表示最小值),而不是值。@Rizier123当然,array\u map
withfunction($a)use(&$min,&max){}
也可以使用。也许这项任务有点容易@用户1032531 Opps,但没有人看到它像这样!为此,您需要另一个代码段。您必须循环每个元素,否则您如何知道是否有比您发现的更大的值?!仅仅因为您在代码中没有看到它,并不意味着array\u column()
不会在整个数组中循环,因为它会循环。您可以使用一个简单的foreach循环,然后只在数组上循环一次,而不喜欢使用array\u column()
两次。更确切地说,如果使用array\u column()
您不仅需要在数组上循环一次才能得到列,还需要使用min()
和max()
,它还需要在整个阵列上循环。因此,您总共在数组上迭代了3次,只是因为您不想在代码中看到“循环”。您可以使用一个简单的foreach循环,并在一个循环中完成所有操作!通过使用限制:不在每个
上循环-您的意思是:1)不要使用foreach
循环语句2)使用一些不比较相邻条目值的指令?1) 使用“array_*”函数满足要求。2) 对于任何使用标准CPU和内存的计算机来说都是不可能的。为了说明这一点,所有传统的计算机都会对数据进行循环。@RyanVincent我应该说“不要使用PHP代码进行循环”。你必须循环每个元素,否则你怎么知道是否有比你发现的更大的值?!仅仅因为您在代码中没有看到它,并不意味着array\u column()
不会在整个数组中循环,因为它会循环。您可以使用一个简单的foreach循环,然后只在数组上循环一次,而不喜欢使用array\u column()
两次。更确切地说,如果使用array\u column()
您不仅需要在数组上循环一次才能得到列,还需要使用min()
和max()
,它还需要在整个阵列上循环。因此,您总共在数组上迭代了3次,只是因为您不想在代码中看到“循环”。您可以使用一个简单的foreach循环,并在一个循环中完成所有操作!通过使用限制:不在每个
上循环-您的意思是:1)不要使用foreach
循环语句2)使用一些不比较相邻条目值的指令?1) 使用“array_*”函数满足要求。2) 对于任何使用标准CPU和内存的计算机来说都是不可能的。为了说明这一点,所有传统的计算机都会对数据进行循环。@RyanVincent我应该说“不要使用PHP代码进行循环”。