Короткий: Есть ли способ получить именованный ключ / значение из SUBARRAY, не зная основного ключа?
Долго:
У меня есть цикл foreach, который извлекает текстовые файлы & превращает их в отдельные / единичные массивы (сбрасывая массив между каждым файлом) …
пример:
Array
(
[Blah Blah] => Array
(
[number] => 10
[name] => nameBlah
[image] =>
)
)Array
(
[pinkblue597] => Array
(
[number] => 18
[name] => nameBlah68
[image] =>
)
)
(1-я часть для преобразования в массив используется несколькими частями процесса, поэтому я не хочу добавлять ненужный код)
Я хочу извлечь значения «name» и «number», однако заранее не знаю значения / формата ключа .. — Пример: pinkblue597
Если я сделаю print_r
Я вижу массив, как я хочу …
print_r($found,true)."\n";
но если я сделаю это, $name=$found[0];
Я не получил результатов для «$ name» …
или же
если я сделаю это, $name=$found[0]["name"];
Я не получил результатов для «$ name» …
Я мог бы сделать это через цикл foreach, но это кажется неэффективным …
PS в этом массиве будет только ОДИН (неизвестный) ключ, & подмассив. Подмассив всегда один и тот же.
Отредактировано: облегчает просмотр кода (забыл это сделать)
затем (вложенный) foreach
петля будут достаточно, возьмите пример ниже,
<?php
$a = [
'somethingUnknown13582563' => [
'name' => 'name',
'number' => 15
],
'somethingUnknown2' => [
'name' => 'another name',
'number' => 24
]
];
foreach ($a as $key => $subArray) {
foreach ($subArray as $subKey => $value) {
echo $subArray[$subKey] . '<br>';
}
}
?>
Выход
name
15
another name
24
Вы могли бы использовать array_values
,
<?php
$a = [
'somethingUnknown13582563' => [
'name' => 'first name',
'number' => 15
],
'somethingUnknown2' => [
'name' => 'name',
'number' => 24
]
];
$a = array_values($a);
echo $a[0]['name'];
?>
Который превратил бы первый ассоциативный массив в числовые индексы и хотел бы,
array(
0 => array(
'name' => 'first name',
'number' => 15,
),
1 => array(
'name' => 'name',
'number' => 24,
)
)
Я не уверен, почему вы создаете вложенный массив в первую очередь, если вы намереваетесь только немедленно удалить его, но так как массив, кажется, имеет только один элемент, и вы заботитесь только об этом элементе, вы можете просто использовать array_pop
$a = [
'somethingUnknown13582563' => [
'name' => 'first name',
'number' => 15
],
];
$data = array_pop($a);
echo $data['name']; // gives you 'first name'
Обратите внимание, что array_pop
разрушительно Так что, если вы не хотите такого поведения, вы можете использовать что-то вроде end
вместо.
$data = end($a); // same effect as array_pop but non-destructive
echo $data['name']; // also gives you 'first name'
С учетом сказанного foreach
построить не обязательно неэффективный. Я верю, что ваша настоящая забота — найти более простой способ разыменовать вложенный массив. Самый простой способ сделать это в вашем случае будет использовать что-то вроде end($a)['name']
что дает вам прямую разыменование, которое вы ищете.
Ты можешь использовать array_map () для достижения этой цели…
array_map — Применяет обратный вызов к элементам данных массивов. Это зациклит все элементы массива через функцию обратного вызова, и вы сможете распечатать каждый элемент, присутствующий в подмассиве.
<?php
$myArry = array(
'Blah Blah' => array(
'number' => 10,
'name' => 'Blah Blah 1',
),
'pinkblue597' => array(
'number' => 15,
'name' => 'Blah Blah 2',
)
);
array_map(function($arr){
echo 'Name : '.$arr['name'].'<br>';
echo 'Number : '.$arr['number'].'<br>';
},$myArry);
?>
Это даст вам:
Name : Blah Blah 1
Number : 10
Name : Blah Blah 2
Number : 15