作为一个新手,有没有人有任何好的教程来帮助我理解不同级别的数组?我试图学习的是如何回应不同的水平,例如:这是输出数组:
Array
(
[meta] =>
Array
(
[total_record_count] => 1
[total_pages] => 1
[current_page] => 1
[per_page] => 1
)
[companies] =>
Array
(
[0] =>
Array
(
[id] => 291869
[url] => https://api.mattermark.com/companies/291869
[company_name] => gohenry.co.uk
[domain] => gohenry.co.uk
)
)
[total_companies] => 1
[page] => 1
[per_page] => 1
)
以下是解析数组的代码:
foreach($jsonObj as $item)
{
echo $item['total_companies'];
}
我真的很难找到结构以及如何输出每个项目,例如尝试过这样的事情:
echo $item[0]['total_companies'];
echo $item['companies'][0]['id'];
任何帮助或指示都会受到极大的欢迎。
答案 0 :(得分:4)
好吧,让我们开始,你有一个多维数组。对于多维数组,您需要使用looping
,例如:for
,while
,foreach
。出于您的目的,它是foreach
。
从数组维开始,Array可以是多维的,就像你有多维一样。如果你有一个如下所示的数组,则它是单维的。
array(
key => value,
key2 => value2,
key3 => value3,
...
)
现在,你怎么知道什么是多维数组,如果你的数组有另一个数组作为子数,那么它被称为多维数组,如下所示。
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
是时候使用你的阵列了。假设您要访问company_name
的值,您应该怎么做?让您的数组名称为$arr
。
首先,您需要使用foreach循环,如:
foreach($arr as $key => $val)
keys
为(meta, companies, total_companies...)
,它们位于第一维。现在检查密钥是否为company_name
,如果匹配的话比你得到的还要多。否则,如果$val
是一个数组,则需要进行另一个循环,您可以使用is_array
进行检查。
通过最后一个元素的相同处理,循环执行并找到你的值。
答案 1 :(得分:1)
答案 2 :(得分:1)
<强>学习强>
从文档开始总是一个好主意:
至于教程,请尝试使用codecademy上的交互式教程:https://www.codecademy.com/learn/php
您的代码
至于您的代码,请查看以下内容,我将向您展示您的数组结构以及如何访问每个元素。也许这会让事情变得更加清晰。
因此,假设您的数组名为textarea
,请参阅如何通过注释访问每个部分。请记住,这不是PHP代码,我只是向您展示如何访问阵列的不同元素。
$myArray
至于你的每个循环
$myArray = Array
(
// $myArray['meta']
[meta] => Array (
// $myArray['meta']['total_record_count']
[total_record_count] => 1
// $myArray['meta']['total_pages']
[total_pages] => 1
// $myArray['meta']['current_page']
[current_page] => 1
// $myArray['meta']['per_page']
[per_page] => 1
)
// $myArray['companies']
[companies] => Array (
// $myArray['companies'][0]
[0] => Array (
// $myArray['companies'][0]['id']
[id] => 291869
// $myArray['companies'][0]['url']
[url] => https://api.mattermark.com/companies/291869
// $myArray['companies'][0]['company_name']
[company_name] => gohenry.co.uk
// $myArray['companies'][0]['domain']
[domain] => gohenry.co.uk
)
)
// $myArray['total_companies']
[total_companies] => 1
// $myArray['page']
[page] => 1
// $myArray['per_page']
[per_page] => 1
)
foreach循环正在循环遍历数组foreach($jsonObj as $item)
{
echo $item['total_companies'];
}
的每个第一级,因此包括:
然后在foreach循环的花括号$jsonObj
内,您可以通过变量{}
引用每个级别。
因此,根据您想要实现的目标,您可能需要更改代码,您尝试做的是什么,因为它对我来说并不是很清楚。
关于循环中的代码:
$item
它不会起作用,因为您尝试访问echo $item['total_companies'];
数组的第一级中的索引为total_companies
的数组,而该数组并不存在。要使它工作,您的数组必须如下所示:
$jsonObj
你想要做的是:
$jsonObj = array (
'0' => array ( // this is what is reference to as $item
'total_companies' => 'some value'
)
)
至于你最后的代码片段:
foreach($jsonObj as $item)
{
echo $jsonObj['total_companies'];
}
上面回答了这个问题。像echo $item[0]['total_companies'];
$jsonObj['total_companies'];
如果您想循环使用这些公司,请尝试以下方法:
echo $item['companies'][0]['id'];
我希望一切都有帮助!如果您不理解,请发表评论,我会更新我的答案。
答案 3 :(得分:0)
使用此函数尝试递归数组打印:
function recursive($array){
foreach($array as $key => $value){
//If $value is an array.
if(is_array($value)){
//We need to loop through it.
recursive($value);
} else{
//It is not an array, so print it out.
echo $value, '<br>';
}
}
}
答案 4 :(得分:0)
如果你知道你的数组结构有多深,你可以执行嵌套的foreach循环,在每个循环之前你必须检查is_array($ array_variable),如:
foreach($parent as $son)
{
if(is_array($son))
{
foreach($son as $grandson)
{
if(is_array($son))
{
foreach($grandson as $grandgrandson)
{
.....
......
.......
}
else
echo $grandson;
}
else
echo $parent;
}
else
echo $son;
}
希望它能帮助您理解