Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取具有特定键值的所有值_Php_Arrays_Loops_Multidimensional Array_Foreach - Fatal编程技术网

Php 获取具有特定键值的所有值

Php 获取具有特定键值的所有值,php,arrays,loops,multidimensional-array,foreach,Php,Arrays,Loops,Multidimensional Array,Foreach,所以我一直想弄明白这一点,现在似乎被卡住了。我有一个多维数组,我试图用某个键输出所有值。代码如下: //My Array: $services = array( array( service_name => 'facebook', service_title => 'Facebook', service_order => 0,

所以我一直想弄明白这一点,现在似乎被卡住了。我有一个多维数组,我试图用某个键输出所有值。代码如下:

//My Array:
$services = array(
                array(  service_name => 'facebook', 
                    service_title => 'Facebook',
                    service_order => 0, 
                    service_type => 'Social Networking'
                    ),
                array(  service_name => 'twitter', 
                    service_title => 'Twitter',
                    service_order => 0,
                    service_type => 'Social Networking'
                    ),
                array(  service_name => 'tumblr', 
                    service_title => 'MySpace',
                    service_order => 0, 
                    service_type => 'Blogging'
                    )
);
问题是我想通过
service\u type
输出值,例如“社交网络”或“博客”,如果我使用这样的foreach语句,我可以这样做:

 foreach($services as $service) {
    if ($service['service_type'] == 'Social Networking') {
             echo($service['service_title']);
    }
    if ($service['service_type'] == 'Blogging') {
             echo($service['service_title']);
    }
}
在我尝试在两种类型之间添加一个标题之前,它可以正常工作,如

foreach($services as $service) {
    if ($service['service_type'] == 'Social Networking') {
             echo($service['service_title']);
    }
    echo ('<h3> Blogging</h3>');
    if ($service['service_type'] == 'Blogging') {
             echo($service['service_title']);
    }
}
foreach($services as$service){
如果($service['service_type']=='socialnetworking'){
echo($service['service_title');
}
echo(‘博客’);
如果($service['service_type']=='Blogging'){
echo($service['service_title');
}
}
我已经了解到这是因为
foreach
循环的工作方式,所以我一直在尝试使用
while($service['service\u type']=='socialnetworking')
(它创建了一个有趣的无限循环)和其他各种方式来实现这一点

理想情况下,我希望按
service\u类型对数组进行排序,然后显示结果,而不必在标题之间运行
foreach
循环


在这方面的任何帮助都将是非常棒的,甚至是关于如何做到这一点的其他建议

我认为您正在尝试这样做:

// Create an array containing all of the distinct "service types"
// from the $services array
$service_types = array();
foreach ($services as $service) {
    // If we have not yet encountered this entry's "service type",
    // then we need to add it to our new array
    if (!in_array($service['service_type'], $service_types)) {
        $service_types[] = $service['service_type'];
    }
}
if (count($service_types)) {
    // For each "service type", we want to echo a header and then
    // a list of services of that type
    foreach ($service_types as $current_type) {
        echo '<h3>'.$current_type.'</h3>';
        // Loop through the services and echo those that are
        // of the correct type
        foreach ($services as $service) {
            if ($service['service_type'] == $current_type) {
                echo($service['service_title']);
            }
        }
    }
} else {
    echo '<h3>No services</h3>'
}
//创建一个包含所有不同“服务类型”的数组
//从$services数组
$service_types=array();
foreach($services as$service){
//如果我们尚未遇到此条目的“服务类型”,
//然后我们需要将其添加到新阵列中
if(!in_数组($service['service_type',$service_types)){
$service_type[]=$service['service_type'];
}
}
if(计数($服务类型)){
//对于每个“服务类型”,我们希望回显一个标头,然后
//该类型服务的列表
foreach($service\u type为$current\u type){
回显“.$current_type.”;
//在服务中循环并回显
//类型正确
foreach($services as$service){
如果($service['service\u type']==$current\u type){
echo($service['service_title');
}
}
}
}否则{
回音“无服务”
}

我认为您正在尝试这样做:

// Create an array containing all of the distinct "service types"
// from the $services array
$service_types = array();
foreach ($services as $service) {
    // If we have not yet encountered this entry's "service type",
    // then we need to add it to our new array
    if (!in_array($service['service_type'], $service_types)) {
        $service_types[] = $service['service_type'];
    }
}
if (count($service_types)) {
    // For each "service type", we want to echo a header and then
    // a list of services of that type
    foreach ($service_types as $current_type) {
        echo '<h3>'.$current_type.'</h3>';
        // Loop through the services and echo those that are
        // of the correct type
        foreach ($services as $service) {
            if ($service['service_type'] == $current_type) {
                echo($service['service_title']);
            }
        }
    }
} else {
    echo '<h3>No services</h3>'
}
//创建一个包含所有不同“服务类型”的数组
//从$services数组
$service_types=array();
foreach($services as$service){
//如果我们尚未遇到此条目的“服务类型”,
//然后我们需要将其添加到新阵列中
if(!in_数组($service['service_type',$service_types)){
$service_type[]=$service['service_type'];
}
}
if(计数($服务类型)){
//对于每个“服务类型”,我们希望回显一个标头,然后
//该类型服务的列表
foreach($service\u type为$current\u type){
回显“.$current_type.”;
//在服务中循环并回显
//类型正确
foreach($services as$service){
如果($service['service\u type']==$current\u type){
echo($service['service_title');
}
}
}
}否则{
回音“无服务”
}

我还没有完全理解您的问题,但是您问我是否可以按服务类型对阵列进行排序,这样您就可以构建一个新的阵列


我还没有完全了解您的问题,但是您询问是否可以按服务类型对阵列进行排序,以便构建一个新的阵列


使用php>5.5,您可以

$myData = array(
    array(
        'service_name'  => 'facebook', 
        'service_title' => 'Facebook',
        'service_order' => 0, 
        'service_type'  => 'Social Networking'
    ),
    array(  
        'service_name'  => 'twitter', 
        'service_title' => 'Twitter',
        'service_order' => 0,
        'service_type'  => 'Social Networking'
    ),
    array(
        'service_name'  => 'tumblr', 
        'service_title' => 'MySpace',
        'service_order' => 0, 
        'service_type'  => 'Blogging'
    )
);

$filtered = array_column($myData, 'service_column');

请参阅:

使用php>5.5,您可以

$myData = array(
    array(
        'service_name'  => 'facebook', 
        'service_title' => 'Facebook',
        'service_order' => 0, 
        'service_type'  => 'Social Networking'
    ),
    array(  
        'service_name'  => 'twitter', 
        'service_title' => 'Twitter',
        'service_order' => 0,
        'service_type'  => 'Social Networking'
    ),
    array(
        'service_name'  => 'tumblr', 
        'service_title' => 'MySpace',
        'service_order' => 0, 
        'service_type'  => 'Blogging'
    )
);

$filtered = array_column($myData, 'service_column');

请参阅:

谢谢,这让我走上了正确的道路。虽然
警告:in_array()[function.in array]:第二个参数的数据类型错误,但我得到了这个错误
不确定这意味着什么,但我将稍微处理一下。如果你能解释一下代码,我也会很高兴的。大部分我都理解,但我理解的越多越好。服务类型应该被引用<代码>$service[service\u type]
应该是第3行和第4行的
$service['service\u type']
。另外,如果您想按服务类型排序,只需添加
sort($service\u types)在第一个
foreach
之后。我添加了一些注释。我不知道你为什么会得到这样的警告,代码一眼就看出来是正确的。我先这么做了,但在问我的朋友Google之后,问题是循环第一次运行时,
$service\u types
没有定义,所以它抛出了一个警告。我添加了
$service_types=array()在第一个
if
之前,它运行得很好。您错过了一个:
$service\u types[]=$service['service\u types']
:)谢谢您让我走上了正确的道路。虽然
警告:in_array()[function.in array]:第二个参数的数据类型错误,但我得到了这个错误
不确定这意味着什么,但我将稍微处理一下。如果你能解释一下代码,我也会很高兴的。大部分我都理解,但我理解的越多越好。服务类型应该被引用<代码>$service[service\u type]
应该是第3行和第4行的
$service['service\u type']
。另外,如果您想按服务类型排序,只需添加
sort($service\u types)在第一个
foreach
之后。我添加了一些注释。我不知道你为什么会得到这样的警告,代码一眼就看出来是正确的。我先这么做了,但在问我的朋友Google之后,问题是循环第一次运行时,
$service\u types
没有定义,所以它抛出了一个警告。我添加了
$service_types=array()在第一个
if
之前,它工作正常。您错过了一个:
$service\u types[]=$service['service\u types']
:)这太棒了。太糟糕了,我刚切换到5.4,我还需要一段时间才能使用它..:(这太神奇了。可惜我刚切换到5.4,我还需要一段时间才能使用它……:(