Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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 - Fatal编程技术网

Php 如何根据需要显示数组的值?

Php 如何根据需要显示数组的值?,php,arrays,Php,Arrays,我的代码如下: <?php $data1 = array(1, 2, 3, 4, 5); $data2 = array( array('id' => 1, 'name' => 'chelsea.jpg'), array('id' => 2, 'name' => 'mu.jpg'), ); foreach ($data1 as $key1 => $v

我的代码如下:

<?php 
    $data1 = array(1, 2, 3, 4, 5);
    $data2 = array(
                array('id' => 1, 'name' => 'chelsea.jpg'),
                array('id' => 2, 'name' => 'mu.jpg'),
            );
    foreach ($data1 as $key1 => $value1) {
        foreach ($data2 as $key2 => $value2) {
            if($value1 == $value2['id'])
                echo $value2['name'].'<br>';
            else
                echo 'No data'.'<br>';
        }
    }
?>

如果代码运行,结果如下所示:

chelsea.jpg

没有数据

没有数据

mu.jpg

没有数据

没有数据

没有数据

没有数据

没有数据

没有数据

这是假的

我想要这样的结果:

chelsea.jpg

mu.jpg

没有数据

没有数据

没有数据


我该怎么做呢?

可能会有帮助

<?php 
    $data1 = array(1, 2, 3, 4, 5);
    $data2 = array(
                array('id' => 1, 'name' => 'chelsea.jpg'),
                array('id' => 2, 'name' => 'mu.jpg'),
            );
    foreach ($data1 as $key1 => $value1) {
        foreach ($data2 as $key2 => $value2) {
            if($value1 == $value2['id'])
                echo $value2['name'] . "<br/>";
            else
                $new_array[] = 'No data';
        }
    }

echo implode("\n", $new_array);

?>

试试这个

<?php 
    $data1 = array(1, 2, 3, 4, 5);
    $data2 = array(
                array('id' => 1, 'name' => 'chelsea.jpg'),
                array('id' => 2, 'name' => 'mu.jpg'),
            );
    $isFound = false;
    foreach ($data1 as $key1 => $value1) {
        foreach ($data2 as $key2 => $value2) {
            if($value1 == $value2['id']){
                echo $value2['name'].'<br>';
                $isFound = true;
            }
        }
        if(!$isFound){
           echo "no data";
           $isFound = false; 
        }
    }
?>

您可以使用in_arrayphp函数来完成此操作

使用以下命令:-

$data1 = array(1, 2, 3, 4, 5);
$data2 = array(
    array('id' => 1, 'name' => 'chelsea.jpg'),
    array('id' => 2, 'name' => 'mu.jpg'),
);
foreach ($data2 as $key2 => $value2) {
    if(in_array($value2['id'],$data1))
        echo $value2['name'].'<br>';
    else
        echo 'No data'.'<br>';
}
$data1=数组(1,2,3,4,5);
$data2=数组(
数组('id'=>1,'name'=>chelsea.jpg'),
数组('id'=>2,'name'=>'mu.jpg'),
);
foreach($data2作为$key2=>$value2){
if(在数组中($value2['id',$data1))
echo$value2['name']。
; 其他的 回显“无数据”。
; }
它将给出如下输出:

已修改:-

$data1 = array(1, 2, 3, 4, 5);
$data2 = array(
    array('id' => 1, 'name' => 'chelsea.jpg'),
    array('id' => 2, 'name' => 'mu.jpg'),
);
foreach ($data1 as $key1 => $value1) {
    $name='No data';
    foreach ($data2 as $key2 => $value2) {
        if($value1 == $value2['id'])
            $name= $value2['name'];
    }
    echo $name.'<br>';
}
$data1=数组(1,2,3,4,5);
$data2=数组(
数组('id'=>1,'name'=>chelsea.jpg'),
数组('id'=>2,'name'=>'mu.jpg'),
);
foreach($data1作为$key1=>$value1){
$name='无数据';
foreach($data2作为$key2=>$value2){
如果($value1==$value2['id']))
$name=$value2['name'];
}
回显$name。“
”; }
它的输出为


您可以转换第二个数组,使其由id列设置关键字。这允许您执行isset而不是任何其他类型的查找

<?php
$data1 = array(1, 2, 3, 4, 5);
$data2 = array(
        array('id' => 1, 'name' => 'chelsea.jpg'),
        array('id' => 2, 'name' => 'mu.jpg'),
);
$data2 = array_column($data2, null, 'id' );
foreach ($data1 as $key1 => $value1) {
    if(isset($data2[$value1]))
        echo $data2[$value1]['name'].'<br>';
            else
        echo 'No data'.'<br>';
}
?>

更新:在考虑了如何最小化代码之后,使用PHP7的null coalesce??接线员

 <?php
    $data1 = array(1, 2, 3, 4, 5);
    $data2 = array(
            array('id' => 1, 'name' => 'chelsea.jpg'),
            array('id' => 2, 'name' => 'mu.jpg'),
    );
    $data2 = array_column($data2, null, 'id' );
    foreach ($data1 as $value1) {
        echo $data2[$value1]['name']??'No data'.'.<br>';
    }
    ?>

找到
id时使用:

$data1 = array(1, 2, 3, 4, 5);
$data2 = array(
            array('id' => 1, 'name' => 'chelsea.jpg'),
            array('id' => 2, 'name' => 'mu.jpg'),
        );
foreach ($data1 as $key1 => $value1) {
    foreach ($data2 as $key2 => $value2) {
        if($value1 == $value2['id']) {
            echo $value2['name'],"\n";
            continue 2;
        }
    }
    echo "No data\n";
}
输出:

chelsea.jpg
mu.jpg
No data
No data
No data

将值存储在数组中并对其进行排序。很抱歉,不清楚您实际想要做什么,或者您想要创建的结果实际上是如何实现的。我无法立即解释导致该结果的任何逻辑。IMHO$isFound标志在没有充分理由的情况下增加了太多的复杂性。否则将是更好的选择。您需要输入
$isFound=false在外部循环内,以便您可以重置每个循环的标志,如果不重置,则标志在第一次发生后将始终为真。仍然不是期望的结果,您需要将
$isFound=false就在外循环的后面
foreach($data1作为$key1=>$value1){
看到这个演示很聪明,但是主要的源代码是$data1对$data2,所以我认为count$data1很重要。但是这里都有,所以OP可以这样做。这并没有给出预期的结果。对于一小组值来说很好,但不能真正扩展。