tldr;
Вы пытаетесь получить доступ к $array['fund']
, когда вы должны получить доступ к $array[0]['fund']
.Вы рассматриваете это как одномерный массив, но это многомерный массив (измерение 1, индексированное; измерение 2, ассоциативное).
Объяснение:
Вы являетесьне показывает конкретный код, к которому вы пытаетесь получить доступ к $array['fund']
, ни свой конкретный ввод, но проблема, как представляется, заключается в том, что вы неправильно понимаете структуру результирующего массива для кода, который вы используете для анализа вашего CSV.
array_map()
+ array_walk()
+ array_combine()
+ array_shift()
кажется немного запутанным способом получить то, что вы хотите, и результаты показывают.Это яркий пример того, как «умный» код становится продуктивным.Конструкцию массива с двумя строками сложнее проанализировать, чем некоторые альтернативы.
Я собираюсь предположить этот ввод, поскольку вы не предоставляете никакого ввода, и чтение внешнего файла выходит за рамки этой проблемы (ина самом деле это не проблема):
// input
$lines = <<<EOF
fund,name,investment,region,sector,status,description,acquisition_date,size,address_line_1,address_line_2,city,county,postcode,longitude,latitude,featured,external_link
"Fund 1","Property Name","Investment Name","London","Office","Published","","","","","","London","","","","","",""
EOF;
Это соответствует массиву, который вы показываете в своем вопросе.
Давайте попробуем разобрать код в дальнейшем:
$array = array_map('str_getcsv', explode(PHP_EOL, $lines));
Это оставляет вас с массивом из двух элементов.В индексе 0 у вас есть заголовки, а в индексе 1 у вас есть значения.
array_walk($array, function(&$a) use ($array) {
$a = array_combine($array[0], $a);
});
Здесь вы проходите каждый из этих двух массивов и array_combine()
каждый с массивом с индексом 0. Вы хотитесоздать массивы, где ключами являются значения из массива, которые содержат заголовки ($array[0]
).
Примечание. Это должно сделать очевидным, что $array
в индексированном массиве, так как вы ужепытаясь получить доступ к элементу в позиции 0
.
Очевидно, что в итоге вы получите дополнительный массив (массив заголовков в сочетании с массивом заголовков), но об этом вы узнаете позже.
array_shift($array);
Здесь вы избавляетесь от массива заголовков (с такими значениями, как $element['fund'] = 'fund'
).Вы удаляете первый элемент вашего массива из двух элементов.Опять же, эта операция ** имеет смысл, только если $array
является индексированным массивом для начала.
На данный момент у вас есть массив из одного элемента, и этот элемент является массивом с 18 значениями ключей =>.
Если в этот момент вы попытаетесь получить доступ к $array['fund']
, он, естественно, потерпит неудачу.Поскольку $array
является индексированным массивом , а не ассоциативным массивом .
Вам необходимо получить доступ к элементам этого индексированного массива, а затем попытаться получить доступfund
.
Например: $array[$i]['fund'];
Вы можете видеть, как это работает здесь .