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

Php 无法分割数组-我需要将数组拆分为两半

Php 无法分割数组-我需要将数组拆分为两半,php,arrays,multidimensional-array,slice,Php,Arrays,Multidimensional Array,Slice,我有一个数组,如下所示。我想把它切成两半,然后从两半中创建两个新数组。但是,如果我使用array_slice,它总是返回null。。。我不明白为什么 array 'pic' => array 0 => string '740' (length=3) 1 => string '741' (length=3) 2 => string '742' (length=3) 3 => string '748' (le

我有一个数组,如下所示。我想把它切成两半,然后从两半中创建两个新数组。但是,如果我使用array_slice,它总是返回null。。。我不明白为什么

array
  'pic' => 
    array
      0 => string '740' (length=3)
      1 => string '741' (length=3)
      2 => string '742' (length=3)
      3 => string '748' (length=3)
  'alt' => 
    array
      0 => string '' (length=0)
      1 => string '' (length=0)
      2 => string 'Test caption 1' (length=14)
      3 => string 'Test caption 2' (length=14)
我需要的阵列应该保留键,只是切成两半,所以我有两个互补的两半。例如,前半部分应如下所示:

array
  'pic' => 
    array
      0 => string '740' (length=3)
      1 => string '741' (length=3)
  'alt' => 
    array
      0 => string '' (length=0)
      1 => string '' (length=0)
下半部分:

array
  'pic' => 
    array
      0 => string '742' (length=3)
      1 => string '748' (length=3)
  'alt' => 
    array
      0 => string 'Test caption 1' (length=14)
      1 => string 'Test caption 2' (length=14)
谢谢

ps-对Mike来说,这就是我用来制作数组的东西,实际上它是由其他数组本身构建的:

$lodgepics = get_field('accommodation_rooms');
$featuredpics = get_field('featured_pics');
$showcasepics = array();
foreach ($featuredpics as $featuredpic) {
    if (isset($featuredpic['featured_pic'])&&!empty($featuredpic['featured_pic'])) $showcasepics[pic][] = $featuredpic['featured_pic'];
    if (isset($featuredpic['featured_alt'])) $showcasepics[alt][] = $featuredpic['featured_alt'];
else $showcasepics[alt][] = '';
}
foreach ($lodgepics as $lodgepic) {
    if(isset($lodgepic['accommodation_roomphoto'])&&!empty($lodgepic['accommodation_roomphoto'])) $showcasepics[pic][] = $lodgepic['accommodation_roomphoto'];
    if(isset($lodgepic['accommodation_roomname'])&&!empty($lodgepic['accommodation_roomname'])) $showcasepics[alt][] = $lodgepic['accommodation_roomname'];
    else $showcasepics[alt][] = '';
}

这些实际上是数组的数组。主数组是一个关联数组,因此需要循环该数组的所有键以获得切片:

$slice1 = array();
$slice2 = array();
foreach ($array as $key => $value)
{
    $slice1[$key] = array_slice($array[$key], ...);
    $slice2[$key] = array_slice($array[$key], ...);
}

这些实际上是数组的数组。主数组是一个关联数组,因此需要循环该数组的所有键以获得切片:

$slice1 = array();
$slice2 = array();
foreach ($array as $key => $value)
{
    $slice1[$key] = array_slice($array[$key], ...);
    $slice2[$key] = array_slice($array[$key], ...);
}

array\u chunk-将数组拆分为块

$array1 = array("1" => "green", "2" => "brown", "3" => "blue", "4" => "black");
$array2 = array("5" => "yellow","6" => "orange","7"=> "violet","8"=> "white");

$arraylength1   = ceil(count($array1)/2);
$res1           = array_chunk($array1,$arraylength1);
$arraylength2   = ceil(count($array2)/2);
$res2           = array_chunk($array2,$arraylength2);

echo "<pre>";
print_r($res1);
print_r($res2);
echo "</pre>";
exit;
$array1=数组(“1”=>“绿色”、“2”=>“棕色”、“3”=>“蓝色”、“4”=>“黑色”);
$array2=数组(“5”=>“黄色”、“6”=>“橙色”、“7”=>“紫色”、“8”=>“白色”);
$ArrayLength 1=ceil(计数($array1)/2);
$res1=数组块($array1,$arrayLength 1);
$ArrayLength=ceil(计数($array2)/2);
$res2=数组块($array2,$arrayLength 2);
回声“;
印刷费($res1);
印刷费($res2);
回声“;
出口

试试这个。

数组\u块-将数组拆分为块

$array1 = array("1" => "green", "2" => "brown", "3" => "blue", "4" => "black");
$array2 = array("5" => "yellow","6" => "orange","7"=> "violet","8"=> "white");

$arraylength1   = ceil(count($array1)/2);
$res1           = array_chunk($array1,$arraylength1);
$arraylength2   = ceil(count($array2)/2);
$res2           = array_chunk($array2,$arraylength2);

echo "<pre>";
print_r($res1);
print_r($res2);
echo "</pre>";
exit;
$array1=数组(“1”=>“绿色”、“2”=>“棕色”、“3”=>“蓝色”、“4”=>“黑色”);
$array2=数组(“5”=>“黄色”、“6”=>“橙色”、“7”=>“紫色”、“8”=>“白色”);
$ArrayLength 1=ceil(计数($array1)/2);
$res1=数组块($array1,$arrayLength 1);
$ArrayLength=ceil(计数($array2)/2);
$res2=数组块($array2,$arrayLength 2);
回声“;
印刷费($res1);
印刷费($res2);
回声“;
出口

试试这个。

我很难理解像你建议的那样做的必要性,如果是我,我不会使用你的结构填充数组,我会创建如下数组:

$slice1 = array();
$slice2 = array();    

foreach ($array as $key => $value) {

    $arrayCount = count($array[$key]);
    $arrayHalfCount = ($arrayCount / 2);

    $slice1[$key] = array_slice($array[$key], 0, $arrayHalfCount);
    $slice2[$key] = array_slice($array[$key], $arrayHalfCount);
}
此数组结构将图像属性保持在一起,而不是将它们分开

tomtheman5在那里有80%,但忽略了需要传递以获得正确切片的数组_切片调用的偏移量和长度参数。然而,他确实提出了一个很好的观点,如果您坚持使用数组结构,那么如果在每个“pic”和“alt”数组中没有匹配的元素,您可能会遇到问题。如果这不是一个问题,那么考虑下面的片段:

$lodgepics = get_field('accommodation_rooms');
$featuredpics = get_field('featured_pics');
$showcasepics = array();
foreach ($featuredpics as $featuredpic) {
    if ((isset($featuredpic['featured_pic'])) && (!empty($featuredpic['featured_pic']))) {
        $currentPic['pic'] = $featuredpic['featured_pic'];
        $currentPic['alt'] = (isset($featuredpic['featured_alt'])) ? $featuredpic['featured_alt'] : ''; 
        $showcasepics[] = $currentPic;
}
}

foreach ($lodgepics as $lodgepic) {
    if ((isset($lodgepic['accommodation_roomphoto'])) && (!empty($lodgepic['accommodation_roomphoto']))) {
        $currentPic['pic'] = $lodgepic['accommodation_roomphoto'];    
        $currentPic['alt'] = (isset($lodgepic['accommodation_roomname'])) ? $lodgepic['accommodation_roomname'] : '';
        $showcasepics[] = $currentPic;
}
}

$showcasepicsCount = count($showcasepics);
$showcasepicsHalfCount = ($showcasepicsCount / 2);

$slice1 = array_slice($showcasepics, 0, $showcasepicsHalfCount);
$slice2 = array_slice($showcasepics, $showcasepicsHalfCount);
--编辑--


我很难理解是否需要像您建议的那样做,如果是我,我不会使用您的结构填充数组,我会创建如下数组:

$slice1 = array();
$slice2 = array();    

foreach ($array as $key => $value) {

    $arrayCount = count($array[$key]);
    $arrayHalfCount = ($arrayCount / 2);

    $slice1[$key] = array_slice($array[$key], 0, $arrayHalfCount);
    $slice2[$key] = array_slice($array[$key], $arrayHalfCount);
}
此数组结构将图像属性保持在一起,而不是将它们分开

tomtheman5在那里有80%,但忽略了需要传递以获得正确切片的数组_切片调用的偏移量和长度参数。然而,他确实提出了一个很好的观点,如果您坚持使用数组结构,那么如果在每个“pic”和“alt”数组中没有匹配的元素,您可能会遇到问题。如果这不是一个问题,那么考虑下面的片段:

$lodgepics = get_field('accommodation_rooms');
$featuredpics = get_field('featured_pics');
$showcasepics = array();
foreach ($featuredpics as $featuredpic) {
    if ((isset($featuredpic['featured_pic'])) && (!empty($featuredpic['featured_pic']))) {
        $currentPic['pic'] = $featuredpic['featured_pic'];
        $currentPic['alt'] = (isset($featuredpic['featured_alt'])) ? $featuredpic['featured_alt'] : ''; 
        $showcasepics[] = $currentPic;
}
}

foreach ($lodgepics as $lodgepic) {
    if ((isset($lodgepic['accommodation_roomphoto'])) && (!empty($lodgepic['accommodation_roomphoto']))) {
        $currentPic['pic'] = $lodgepic['accommodation_roomphoto'];    
        $currentPic['alt'] = (isset($lodgepic['accommodation_roomname'])) ? $lodgepic['accommodation_roomname'] : '';
        $showcasepics[] = $currentPic;
}
}

$showcasepicsCount = count($showcasepics);
$showcasepicsHalfCount = ($showcasepicsCount / 2);

$slice1 = array_slice($showcasepics, 0, $showcasepicsHalfCount);
$slice2 = array_slice($showcasepics, $showcasepicsHalfCount);
--编辑--


这似乎是一个局部解决方案,“…”表示需要传递给数组_切片调用的偏移量和长度。对不起,应该已经指定了。我不知道奇数个元素的预期行为应该是什么,所以我没有尝试。这似乎是部分解决方案,“…”表示需要传递给数组_切片调用的偏移量和长度。抱歉,应该已经指定了。我不知道奇数元素的预期行为应该是什么,所以我没有尝试。嗨,迈克,谢谢你的建议,非常有用。我在我的原始帖子中包含了我用来构造数组的代码,你能检查一下吗?也许我可以简单地调整数组,使其更易于切片和使用-thanks@Fulvio:更新了文章,介绍了构建图像数组的建议方法。嗨,迈克,谢谢你的建议,非常有用。我在原始文章中包含了构建数组的代码,你能检查一下吗?也许我可以简单地调整数组,使其更易于切片和使用-thanks@Fulvio:更新帖子,介绍构建图像阵列的建议方法。