可悲的是我还没有找到任何解决办法。
我有一个多维数组,如下所示:
Array
(
[0] => Array
(
[Symbol] => CASY.US
[Position] => 169873920
)
[1] => Array
(
[Symbol] => US500
[Position] => 168037428
) )
现在,我想将内部数组的键的名称写入变量,以使这些变量具有以下值:
$col1 = "Symbol"
$col2 = "Position"
我该如何实现?不知何故有几个foreach循环?
背景:之后,我要检查列是否具有用于验证的正确名称。
谢谢!
答案 0 :(得分:0)
循环嵌套,并将键保存到带有“ col”和一个以后可以使用的整数(如果确实必须提取)的数组中,但是我建议将它们保留在数组中。
foreach($array as $subarray){
$i = 1;
foreach($subarray as $key => $val){
$keys["col" . $i] = $key;
$i++;
}
break; // no need to keep looping if the array is uniform
}
//if you must:
extract($keys);
$keys =[];
$i = 1;
foreach($array as $subarray){
foreach($subarray as $key => $val){
if(!in_array($key, $keys)){
$keys["col" . $i] = $key;
$i++;
}
}
}
var_dump($keys);
//if you must:
extract($keys);
var_dump($col1, $col2, $col3);
答案 1 :(得分:0)
老实说,我会做这样的事情:
$required = array_flip(['Symbol', 'Position']); //flip because I am lazy like that ['Symbol'=>0, 'Position'=>1]
foreach($array as $subarray){
$diff = array_diff_key($required, $subarray);
//prints any keys in $required that are not in $subarray
print_r($diff);
if(!empty($diff)){
//some required keys were missed
}
}
虽然不清楚如何验证这些原因,但原因正如我在此评论中所解释的
它仍然不能解决问题,因为您实际上没有办法知道键是什么(如果它们不是统一的)。因此,在我的示例中,
foo
是$col3
,如果以后有bar
,那又是$col4
,如果下次顺序不同,该怎么办……。它们将是不同的数字。当然,如果有的话,这是几个问题,但是您在这里无法保证。
通过对键进行动态编号,如果数组的结构发生变化,您将不知道这些动态变量包含哪些内容,因此也不知道如何验证它们。
因此,即使您设法做到这一点,如果您的数据发生更改,也将不得不重新访问代码。
无论如何,如果您想查看每个数组是否包含它需要的键,那么我上面所说的是一种更合理的方法。