Ключи многомерного массива к переменной - PullRequest
0 голосов
/ 02 марта 2019

к сожалению, я не нашел никакого решения.

У меня есть многомерный массив, который выглядит так:

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

Теперь я хочу написать имя ключей внутреннего массивав переменные, так что у меня есть эти переменные со значениями:

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

Как я могу этого достичь?Каким-то образом с парой циклов foreach?

Справочная информация: После этого я хочу проверить, имеют ли столбцы правильное имя для проверки.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Честно говоря, я бы сделал что-то вроде этого:

$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
     }
}

Хотя неясно, как вы их проверяете, причина в том, как я объяснил в этом комментарии

это все еще не 't решить проблему, так как у вас нет возможности узнать, какими будут ключи (если они не одинаковы).Так что с моим примером foo это $col3, что если у меня bar позже, это $col4, что если в следующий раз порядок будет другим ... они будут другими числами.Конечно, это несколько, что если, но у вас нет никаких гарантий здесь.

При динамической нумерации ключей, если структура массива когда-либо изменится, вы не будете знать, что содержат эти динамические переменные, и, как таковые, не будут знать, как их проверять.

Так что даже если вам удастся заставить это работать, если ваши данные когда-либо изменятся, вам придется повторно посетить код.

В любом случае, если вы хотите увидеть, содержит ли каждый массив ключи, которые ему необходимы,то, что я изложил выше, было бы более разумным способом сделать это.

0 голосов
/ 02 марта 2019

Цикл вложен и сохраните ключи в массив с "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

...