多维数组键到变量

时间:2019-03-02 19:40:35

标签: php arrays multidimensional-array foreach key

可悲的是我还没有找到任何解决办法。

我有一个多维数组,如下所示:

Array
(
    [0] => Array
        (
            [Symbol] => CASY.US
            [Position] => 169873920
        )
    [1] => Array
        (
            [Symbol] => US500
            [Position] => 168037428
        ) )

现在,我想将内部数组的键的名称写入变量,以使这些变量具有以下值:

$col1 = "Symbol"
$col2 = "Position"

我该如何实现?不知何故有几个foreach循环?

背景:之后,我要检查列是否具有用于验证的正确名称。

谢谢!

2 个答案:

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

https://3v4l.org/ALVtp


如果子数组不相同,则需要循环所有子数组,并查看密钥是否已保存;如果未保存,则跳过它。

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

https://3v4l.org/EklPK

答案 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,如果下次顺序不同,该怎么办……。它们将是不同的数字。当然,如果有的话,这是几个问题,但是您在这里无法保证。

通过对键进行动态编号,如果数组的结构发生变化,您将不知道这些动态变量包含哪些内容,因此也不知道如何验证它们。

因此,即使您设法做到这一点,如果您的数据发生更改,也将不得不重新访问代码。

无论如何,如果您想查看每个数组是否包含它需要的键,那么我上面所说的是一种更合理的方法。